NETCF平台下利用XmlSerializer对于复杂类型序列化的探索(三)
2006-12-15 18:02
609 查看
首先,来看一个简单的例子,其在PC和PDA上均可以顺利的序列化和反序列化。
namespace RFID.ReaderProxy
<?xml version="1.0"?>
<ns:TriggerCommand xmlns:ns="urn:epcglobal:rp:xsd:1">
<name>hello</name>
<setHandle>123.456</setHandle>
</ns:TriggerCommand>
这个类中的成员实际上对应这XSD中的choice,当choice中的选项具有不同的类型和不同的名称时(如上例),XmlSerialize会自动识别数据的类型,仅需一个object类型的字段即可,程序可以强制对item进行类型转换。
下面根据我们的扩展性和兼容性需要,处理XSD中的any, 修改后的代码如下:其中添加了[XmlAnyElementAttribute()]
namespace RFID.ReaderProxy
namespace RFID.ReaderProxy
{
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "urn:epcglobal:rp:xsd:1", IsNullable = false)]
public partial class TriggerCommand
{
[XmlElementAttribute(Form = XmlSchemaForm.Qualified)]
public string name;
[XmlAnyElementAttribute()]
[XmlElementAttribute("create", typeof(int), Form = XmlSchemaForm.Qualified)]
[XmlElementAttribute("setHandle", typeof(double), Form = XmlSchemaForm.Qualified)]
[XmlElementAttribute("fire", typeof(string), Form = XmlSchemaForm.Qualified)]
[XmlChoiceIdentifierAttribute("ItemElementName")]
public object Item;
[XmlIgnoreAttribute()]
public TriggerCommandItemChoiceType ItemElementName;
}
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "")]
public enum TriggerCommandItemChoiceType
{
[System.Xml.Serialization.XmlEnumAttribute("##any:")]
Item,
[XmlEnumAttribute(Name = "create")]
create,
[XmlEnumAttribute(Name = "setHandle")]
setHandle,
[XmlEnumAttribute(Name = "fire")]
fire
}
}
OK,现在PC和PDA上均可以获得相同的XML输出了。
至此,复杂对象在NETCF中的序列化所遇到的问题基本上解决了,当然,要处理EPC中复杂的XSD并让其在NETCF中正常工作,还需要很多额外的工作,后面等总结出来后再发上来。
namespace RFID.ReaderProxy
<?xml version="1.0"?>
<ns:TriggerCommand xmlns:ns="urn:epcglobal:rp:xsd:1">
<name>hello</name>
<setHandle>123.456</setHandle>
</ns:TriggerCommand>
这个类中的成员实际上对应这XSD中的choice,当choice中的选项具有不同的类型和不同的名称时(如上例),XmlSerialize会自动识别数据的类型,仅需一个object类型的字段即可,程序可以强制对item进行类型转换。
下面根据我们的扩展性和兼容性需要,处理XSD中的any, 修改后的代码如下:其中添加了[XmlAnyElementAttribute()]
namespace RFID.ReaderProxy
namespace RFID.ReaderProxy
{
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "urn:epcglobal:rp:xsd:1", IsNullable = false)]
public partial class TriggerCommand
{
[XmlElementAttribute(Form = XmlSchemaForm.Qualified)]
public string name;
[XmlAnyElementAttribute()]
[XmlElementAttribute("create", typeof(int), Form = XmlSchemaForm.Qualified)]
[XmlElementAttribute("setHandle", typeof(double), Form = XmlSchemaForm.Qualified)]
[XmlElementAttribute("fire", typeof(string), Form = XmlSchemaForm.Qualified)]
[XmlChoiceIdentifierAttribute("ItemElementName")]
public object Item;
[XmlIgnoreAttribute()]
public TriggerCommandItemChoiceType ItemElementName;
}
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "")]
public enum TriggerCommandItemChoiceType
{
[System.Xml.Serialization.XmlEnumAttribute("##any:")]
Item,
[XmlEnumAttribute(Name = "create")]
create,
[XmlEnumAttribute(Name = "setHandle")]
setHandle,
[XmlEnumAttribute(Name = "fire")]
fire
}
}
OK,现在PC和PDA上均可以获得相同的XML输出了。
至此,复杂对象在NETCF中的序列化所遇到的问题基本上解决了,当然,要处理EPC中复杂的XSD并让其在NETCF中正常工作,还需要很多额外的工作,后面等总结出来后再发上来。
相关文章推荐
- NETCF平台下利用XmlSerializer对于复杂类型序列化的探索(一)
- NETCF平台下利用XmlSerializer对于复杂类型序列化的探索(二)
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目
- 【学习】WCF的服务契约、复杂类型序列化、消息契约的实现续-IXmlSerializable与MessageContract
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml)
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(10):服务器端和客户端数据类型的自动转换:以XML方式序列化数据、小结
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml)
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(10):服务器端和客户端数据类型的自动转换:以XML方式序列化数据、小结
- WCF 第六章 编码与序列化 使用NetDataContractSerializer共享类型
- WCF 第六章 编码与序列化 使用NetDataContractSerializer共享类型
- 利用XML序列化和Asp.Net Web缓存实现站点配置文件
- asp.net利用对象数组实现xml序列化的代码实例
- ASP.NET下使用xml反序列化、缓存实现个性化配置文件的实时生效
- 用vs2012的命令利用xsd文件生成对应的C#类,把xml的string类型映射到生成的类
- C# WebApi Xml序列化问题解决方法:“ObjectContent`1”类型未能序列化内容类型“application/xml;charset=utf-8"的响应正文。...
- C# XmlSerializer实现序列化浅析(转载)
- NETCF运行平台检测
- 利用Asp.Net Core的MiddleWare思想如何处理复杂业务流程详解
- unity xml序列化与反序列化 多平台
- 序列化对象到Xml文件以及反序列话Xml文件到对象(序列化数据到8个Java原型类型)