C# .NET中Xml序列化失败的场景

C# .NET中Xml序列化失败的场景,c#,.net,xml-serialization,C#,.net,Xml Serialization,我想知道在.NET中xml序列化可能失败的最常见情况。TimeSpan对象不可序列化IDictionary-实现类型也不可序列化(尽管它们可以通过一些手动处理进行序列化)。我主要考虑XmlSerializer: 它仅限于树状数据;它无法处理完整的对象图 它仅限于公共课上的公共成员 它对对象成员没有多大作用 它在泛型方面有一些弱点 与许多序列化程序一样,它不会涉及集合上的实例属性(首先是错误的做法) xml并不总是大数据的好选择(尤其是性能方面) 需要公共的无参数构造函数 DataContra

我想知道在.NET中xml序列化可能失败的最常见情况。

TimeSpan
对象不可序列化<代码>IDictionary-实现类型也不可序列化(尽管它们可以通过一些手动处理进行序列化)。

我主要考虑
XmlSerializer

  • 它仅限于树状数据;它无法处理完整的对象图
  • 它仅限于公共课上的公共成员
  • 它对
    对象
    成员没有多大作用
  • 它在泛型方面有一些弱点
  • 与许多序列化程序一样,它不会涉及集合上的实例属性(首先是错误的做法)
  • xml并不总是大数据的好选择(尤其是性能方面)
  • 需要公共的无参数构造函数
DataContractSerializer
解决了其中一些问题,但有其自身的局限性:

  • 它无法处理属性中的值
  • 需要.NET3.0(因此在2.0中没有太多使用)

根据序列化程序的不同,循环引用可能不起作用,因为.NET 2.0无法轻松序列化泛型集合,所以标记为[过时]的类不会被XmlSerializer序列化


请参阅另一个问题:

对我来说,使用shadows关键字也破坏了序列化和反序列化,因为阴影会导致该属性的新实现存在,从而使其与正确重建不兼容。仅当您想重新键入子类的特定类型时才使用重载。

公共成员问题可以通过使用DataContractSerializer解决。这些都是关于.NET中Xml序列化框架的好消息,但我不会说它们是Xml序列化“失败”的常见情况。例如,Xml序列化程序仅序列化公共读/写成员是序列化框架的一个属性,而不是失败的场景。它要求类拥有一个公共的无参数的ctor本身也不是一个“失败”。对于那些不了解VB.NET的人来说,“
阴影
”可能与C中的
new
public new int PropertyName{get;set;}
相当,其中基类有一个
public virtual int PropertyName…