返回首页
当前位置: 主页 > 编程语言 > XML教程 >

XML序列化和反序列化教程

时间:2016-09-30 23:14来源:电脑教程学习网 www.etwiki.cn 编辑:admin

序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。在接口定义的过程中,经常使用XML作为数据传输标准,本文介绍在一个XML格式接口对接的过程。

【开发环境】

开发工具:Visual studio 2013
操作系统Windows 8.1

【正文】

接口文档数据定义:

参数
说明
类型
String
XML报文
assetid
资产ID 唯一标识
String
groupid
业务系统ID 唯一标识
String
assetname
资产名称
String
assetip
资产IP
String
assetType
资产类型CODE
String
deviceuser
资产登录用户 (允许空)
String
devicepwd
资产登录密码 (允许空)
String
switchuser
切换用户(允许空)
String
Port
端口(允许空)
int
sid
实例数据库(允许空)
int
extend
扩展字段 (允许空)
String

文档中给的例子:
         <root>
    <success>
        <assetid>assetd</assetid>
        <groupid>groupid</groupid>
        <assetname>assetname</assetname>
        <assetip>assetp</assetip>
        <assetType>OS_REDHAT</assetType>
        <deviceuser>deviceuser</deviceuser>
        <devicepwd>devicepwd</devicepwd>
    </success>
    <success>
        <assetid>assetd</assetid>
        <groupid>groupid</groupid>
        <assetname>assetname</assetname>
        <assetip>assetp</assetip>
        <assetType>OS_REDHAT</assetType>
        <deviceuser>deviceuser</deviceuser>
        <devicepwd>devicepwd</devicepwd>
    </success>

我们本地数据模型定义:

数据模型比文档中的定义多了OsName, AssetType是根据OsName来生成的,其他的数据定义大小写也不符合规范,修改后的数据定义如下:
 


文档中需要的数据是list结构,并且名称需要指定为root,我们继承List新建一个结构用于构造root。

使用XmlSerializer序列化后得到的数据为:

和文档对比,多了xmls的命名空间,删除命名空间

序列化出来的内容:
<?xml version="1.0" encoding="utf-16"?>
<root>
    <success>
        <assetid>23423</assetid>
        <groupid />
        <assetname />
        <assetip>123;98</assetip>
        <assetType>OS_REDHAT</assetType>
        <deviceuser />
        <devicepwd />
        <switchuser />
        <port />
        <sid />
        <extend />
    </success>
    <success>
        <assetid>23423</assetid>
        <groupid />
        <assetname />
        <assetip>123;98</assetip>
        <assetType>OS_REDHAT</assetType>
        <deviceuser />
        <devicepwd />
        <switchuser />
        <port />
        <sid />
        <extend />
    </success>
</root>
和接口方沟通,xml的定义使用UTF-8,我们.net默认生成的是UTF-16,对StringWriter改写

重新序列化

结果为:
<?xml version="1.0" encoding="utf-8"?>
<root>
    <success>
        <assetid>23423</assetid>
        <groupid />
        <assetname />
        <assetip>123;98</assetip>
        <assetType>OS_REDHAT</assetType>
        <deviceuser />
        <devicepwd />
        <switchuser />
        <port />
        <sid />
        <extend />
    </success>
    <success>
        <assetid>23423</assetid>
        <groupid />
        <assetname />
        <assetip>123;98</assetip>
        <assetType>OS_REDHAT</assetType>
        <deviceuser />
        <devicepwd />
        <switchuser />
        <port />
        <sid />
        <extend />
    </success>
</root>
这样,数据格式就和文档中一致,可以进行后续的联调了。
------分隔线----------------------------
标签(Tag):XML序列化 XML反序列化
------分隔线----------------------------
推荐内容
猜你感兴趣