我将提出一项技术建议,将大量对象序列化为XML。我们目前有一个NHibernate数据库
这不是重点,但是因为我已经知道这将是你的第一个问题:
为什么选择XML
现在,我正在考虑将这些数据序列化的最佳方法。
我知道XmlSerializer
类,但是根据我的理解,它通过反射,获取所有属性,检查方法/属性上是否有任何装饰器,并且我关心有表现问题。
我也担心引用:我们有一个根对象,一个叶子可以引用另一个叶子(如:根节点A,它拥有一个B和C对象,以及C引用B(非常虚拟的例子,在我们的我们之间有很多级别/抽象。)
XmlSerializer
的反思用法是否正确?有没有办法避免反思(除了实施IXmlSerializable
?答案 0 :(得分:0)
我今天早上没有时间作为更好的例子,但请考虑以下简单案例:
public class Inner {
public int IX {get;set;}
public string IY {get;set;}
}
public class Outer {
public int OX {get;set;}
public IEnumerable<Inner> OI {get;set;}
}
public XDocument SerializeOuter(Outer obj)
{
return new XDocument(
new XElement("Outer",
new XAttribute("OX", obj.OX.ToString()),
new XElement("Inners", from i in obj.OI
select SerializeInner(i))));
}
private XElement SerializeInner(Inner obj)
{
return new XElement("Inner",
new XAttribute("IX", obj.IX),
new XElement("IY", obj.IY));
}
使用示例:
public static void Demo()
{
var outer = new Outer {
OX = 1,
OI = new[] {new Inner {IX = 2, IY = "two"}, new Inner {IX = 3, IY = "three"}}
};
var doc = SerializeOuter(outer);
Console.WriteLine(doc.ToString());
}
这会产生:
<Outer OX="1">
<Inners>
<Inner IX="2">
<IY>two</IY>
</Inner>
<Inner IX="3">
<IY>three</IY>
</Inner>
</Inners>
</Outer>