您通常不需要xpath或xsd来使用linq to xml,但它也不会做您想要的事情。
XmlSerializer
很接近,但是
树
序列化程序,不是
图表
序列化程序。
DataContractSerializer
(.NET 3.0)
做
通过重载构造函数之一提供图形支持,但不提供对XML的完全控制。
BinaryFormatter
提供图形支持和基于元数据/类型的加工,但如果更改程序集,则非常脆弱,并且在平台之间不可移植。
我想应该弄清楚的是:我的数据是树还是图?
XmlSerializer程序
可能已经做了你需要的。
using System;
using System.Runtime.Serialization;
using System.IO;
[DataContract]
public class Outer {
[DataMember]
public Inner Inner { get; set; }
}
[DataContract]
public class Inner {
[DataMember]
public Outer Outer { get; set; }
}
class Program {
static void Main() {
Outer outer = new Outer(), clone;
outer.Inner = new Inner { Outer = outer };
var dcs = new DataContractSerializer(typeof(Outer), null,
int.MaxValue, false, true, null);
using (MemoryStream ms = new MemoryStream()) {
dcs.WriteObject(ms, outer);
ms.Position = 0;
clone = (Outer)dcs.ReadObject(ms);
}
Console.WriteLine(ReferenceEquals(
clone, clone.Inner.Outer));
}
}