需要一个精确的教程来序列化和反序列化c#中的类层次结构

时间:2011-05-14 08:38:46

标签: c# xml-serialization

请为我提供一个精确的教程/网站链接,用于序列化和反序列化c#中的类层次结构。

3 个答案:

答案 0 :(得分:1)

您可以使用XmlSerializer类:

var instance = new SomeClass();
var serializer = new XmlSerializer(typeof(SomeClass));
using (var writer = XmlWriter.Create("output.xml"))
{
    serializer.Serialize(writer, instance);
}

并反序列化:

var serializer = new XmlSerializer(typeof(SomeClass));
using (var reader = XmlReader.Create("output.xml"))
{
    var instance = (SomeClass)serializer.Deserialize(reader);
}

序列化/反序列化过程可以是controlled by using attributes

另一个常用于XML序列化的流行类是DataContractSerializer,它由WCF使用,但可以在任何应用程序中使用。

答案 1 :(得分:0)

最基本的,xml序列化可以像启动XmlSerializer并使用它一样简单。但是,您可以使用many many attributes来影响序列化程序,如果无法注释,则可以使用XmlAttributeOverrides。特别是,既然您提到了层次结构,那么您需要:

[XmlInclude(typeof(SomeDerivedType))]
public class Foo {}

public class SomeDerivedType : Foo {}

关于XmlSerializer的其他说明:

  • 类型必须是公开的
  • 仅考虑公共属性和字段
  • 必须有一个公共无参数构造函数(或默认构造函数)
  • 它是序列化程序,因此不保留对象引用(您可以使用[XmlIgnore]来避免向上导航“父”属性)
  • 如果您想要自定义序列化,也可以实现IXmlSerializable,但我不建议
  • 不支持序列化程序回调

答案 2 :(得分:0)

Deep Serialization: Binary and SOAP Serialization with a Generic Twist

  

序列化允许您转换   物体图形成线性   字节序列,XML或SOAP。一旦   一个物体被夷为平地,你可以存放   它或通过电线发送。   然后可以是序列化数据   反序列化。反序列化   基本上重建了图表   您最初序列化的对象。   序列化听起来很复杂,但是   在实践中,它很容易因为   .NET框架最需要处理   你的复杂性。