C# .NET中Xml序列化失败的场景
我想知道在.NET中xml序列化可能失败的最常见情况。C# .NET中Xml序列化失败的场景,c#,.net,xml-serialization,C#,.net,Xml Serialization,我想知道在.NET中xml序列化可能失败的最常见情况。TimeSpan对象不可序列化IDictionary-实现类型也不可序列化(尽管它们可以通过一些手动处理进行序列化)。我主要考虑XmlSerializer: 它仅限于树状数据;它无法处理完整的对象图 它仅限于公共课上的公共成员 它对对象成员没有多大作用 它在泛型方面有一些弱点 与许多序列化程序一样,它不会涉及集合上的实例属性(首先是错误的做法) xml并不总是大数据的好选择(尤其是性能方面) 需要公共的无参数构造函数 DataContra
TimeSpan
对象不可序列化<代码>IDictionary-实现类型也不可序列化(尽管它们可以通过一些手动处理进行序列化)。我主要考虑XmlSerializer
:
- 它仅限于树状数据;它无法处理完整的对象图
- 它仅限于公共课上的公共成员
- 它对
成员没有多大作用对象
- 它在泛型方面有一些弱点
- 与许多序列化程序一样,它不会涉及集合上的实例属性(首先是错误的做法)
- xml并不总是大数据的好选择(尤其是性能方面)
- 需要公共的无参数构造函数
DataContractSerializer
解决了其中一些问题,但有其自身的局限性:
- 它无法处理属性中的值
- 需要.NET3.0(因此在2.0中没有太多使用)
请参阅另一个问题:对我来说,使用shadows关键字也破坏了序列化和反序列化,因为阴影会导致该属性的新实现存在,从而使其与正确重建不兼容。仅当您想重新键入子类的特定类型时才使用重载。公共成员问题可以通过使用DataContractSerializer解决。这些都是关于.NET中Xml序列化框架的好消息,但我不会说它们是Xml序列化“失败”的常见情况。例如,Xml序列化程序仅序列化公共读/写成员是序列化框架的一个属性,而不是失败的场景。它要求类拥有一个公共的无参数的ctor本身也不是一个“失败”。对于那些不了解VB.NET的人来说,“
阴影
”可能与C中的new
:public new int PropertyName{get;set;}
相当,其中基类有一个public virtual int PropertyName…
。