XML序列化与REST WCF Data Contract匹配时遇到的2个问题
2013-12-26 12:10
453 查看
问题一:
XML序列化与RESTful WCF Data Contract不能匹配,无法传递类的值。
现象:
给类加上[Serializable]Attribute,可以成功序列化,但是WCF Service不能识别。发现XML序列化与WCF Data Contract中成员的顺序必须相同。
解决方案:
1.类的头部清空WCF Data Contract的默认命名空间(见代码)。
2.所有元素加上XML序列化和WCF DataMember的Order(见代码),包括被调用的类。
问题二:
遇上List类型,WCF Service又不能识别。
现象:
XML序列化的对象,Service无法识别。
解决方案:
给[XmlElement]Attribute加上List的完整Type(见代码)。
面对上面这些问题,当Google未果的时候,该怎么办呢?经验和知识是你的救命稻草。技术是一个不断发展的事物,要求每一个技术人员终身学习的职业,学习应该成为程序员血液中的一份子!与各位技术战线的兄弟共勉。
XML序列化与RESTful WCF Data Contract不能匹配,无法传递类的值。
现象:
给类加上[Serializable]Attribute,可以成功序列化,但是WCF Service不能识别。发现XML序列化与WCF Data Contract中成员的顺序必须相同。
解决方案:
1.类的头部清空WCF Data Contract的默认命名空间(见代码)。
2.所有元素加上XML序列化和WCF DataMember的Order(见代码),包括被调用的类。
using System; using System.Collections.Generic; using System.Runtime.Serialization; using System.Xml.Serialization; namespace MySchool.BLL.Model.Common.User { [Serializable] [DataContract(Namespace = "")] public sealed class User { [DataMember(Order = 1)] [XmlElement(Order = 1)] public int id { get; set; } [DataMember(Order = 2)] [XmlElement(Order = 2)] public string userName { get; set; } [DataMember(Order = 3)] [XmlElement(Order = 3)] public string nickName { get; set; } //...... private Profile m_profile = null; [DataMember(Order = 8)] [XmlElement(Order = 8)] public Profile Profile { get { return m_profile; } set { m_profile = value; } } } [Serializable] [DataContract(Namespace="")] public sealed class Profile { [DataMember(Order = 1)] [XmlElement(Order = 1)] public int id { get; set; } [DataMember(Order = 2)] [XmlElement(Order = 2)] public int nation { get; set; } [DataMember(Order = 3)] [XmlElement(Order = 3)] public int gender { get; set; } //... } }
问题二:
遇上List类型,WCF Service又不能识别。
现象:
XML序列化的对象,Service无法识别。
解决方案:
给[XmlElement]Attribute加上List的完整Type(见代码)。
[DataMember(Order = 11)] [XmlElement(Order = 11, Type = typeof(List<SchoolGradeClass>))] public List<SchoolGradeClass> SchoolGradeClassList { get; set; }
面对上面这些问题,当Google未果的时候,该怎么办呢?经验和知识是你的救命稻草。技术是一个不断发展的事物,要求每一个技术人员终身学习的职业,学习应该成为程序员血液中的一份子!与各位技术战线的兄弟共勉。
相关文章推荐
- wcf 基础教程 契约 Contract 控制xml输出 数据契约DataContract序列化前身 XmlSerializer xml序列化
- DataContractJsonSerializer反序列化的“System.Xml.XmlException: 遇到意外字符“ï””错误
- 化零为整WCF(9) - 序列化(DataContractSerializer, XmlSerializer, DataContractJsonSerializer, SoapFormatter, BinaryFormatter)
- WCF 第六章 序列化和编码之NetDataContractSerializer
- WCF问题集锦:未按照DataMember定义的名称序列化对象
- 化零为整WCF(9) - 序列化(DataContractSerializer, XmlSerializer, DataContractJsonSerializer, SoapFormatter, BinaryFormatter)
- WCF 第六章 序列化和编码之DataContractJsonSerializer
- XStream反序列化xml时遇到汉字乱码问题
- 化零为整WCF(9) - 序列化(DataContractSerializer, XmlSerializer, DataContractJsonSerializer, SoapFormatter, BinaryFormatter)
- WCF - 序列化(DataContractSerializer, XmlSerializer, DataContractJsonSerializer, SoapFormatter, Binar
- Dictionary在XML序列化时遇到的问题及应对方案
- 化零为整WCF(9) - 序列化(DataContractSerializer, XmlSerializer, DataContractJsonSerializer
- WCF 第六章 编码与序列化 使用NetDataContractSerializer共享类型
- wcf 基础教程 契约 Contract 数据契约DataContract序列化前身 XmlSerializer xml序列化
- WCF 第六章 序列化和编码之NetDataContractSerializer
- WCF问题集锦:未依照DataMember定义的名称序列化对象
- WCF(10):序列化(DataContractSerializer, XmlSerializer, DataContractJsonSerializer, SoapFormatter, Binary
- WCF 第六章 序列化和编码之DataContractJsonSerializer
- XmlSerializer vs DataContractSerializer: Serialization in Wcf
- WCF 第六章 编码与序列化 使用NetDataContractSerializer共享类型