Jus*_*tin 4 c# attributes datacontractserializer
我有一些简单的POCO对象:
public class ProductCategoryDTO
{
public string Name { get; set; }
public DateTime ModifiedDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
由于有时字段顺序很重要(例如,如果发送到Infopath表单),我需要在序列化时保持元素顺序.
现在我很困惑,我应该为班级和每个领域使用什么属性.我知道:
然后,如果我想支持XMLSerializer和DataContractSerializer,那么要使用哪些属性,因此它可以在WCF或ASP中使用.网页服务?
严格来说,你不需要使用任何属性;-p它曾经是DataContractSerializer需要[DataContract]/ [DataMember](并且它们绝对应该被使用),但你可以不使用它(但它然后以非常可疑的方式使用它)类似于BinaryFormatter).同样地,XmlSerializer并不需要,除非你想控制一切东西.但是,您应该注意一些差异:
XmlSerializer要求(和使用)公共无参数构造函数; DataContractSerializer 不使用构造函数(根本).所以要小心,不要(对于WCF)依赖ctor中的代码 - 如果你有必要的初始化代码,请使用WCF的序列化回调.XmlSerializer要求公共领域(yeuch)或公共财产两者get和set(甚至列表); DataContractSerializer很乐意对私人成员,属性(例如)公共get和私有set,以及没有 `集合的集合(只要你的类型初始化它).XmlSerializer要求公共类型; IIRC DataContractSerializer不那么挑剔是的 您可以同时支持两个序列化程序,并且可以并行添加任意数量的属性,但如果您想要完全兼容,请注意上述内容.
另一种选择是使用XmlSerializer; 您可以配置WCF使用XmlSerializer使用[XmlSerialzerFormat].这两个选项都支持继承,via [XmlInclude]和[KnownType].
最后,请注意,如果您实现IXmlSerializable,这优先于任何一个,但很难做到正确.除非必须这样做,否则不要这样做.
| 归档时间: |
|
| 查看次数: |
1849 次 |
| 最近记录: |