使用LINQ to XML实现IXmlSerializable
本文关键字:实现 IXmlSerializable XML to LINQ 使用 | 更新日期: 2023-09-27 18:29:15
我觉得这可能是重复的,但我找不到我想要的确切答案。我正在一个对象上实现IXmlSerializable,并想知道使用linq-to-xml是否可以接受。
替换此。。。
public void WriteXml(XmlWriter writer)
{
writer.WriteElementString("Name", _name);
writer.WriteElementString("X", _x.ToString());
writer.WriteElementString("Y", _y.ToString());
}
用这个。。。
public void WriteXml(XmlWriter writer)
{
XElement element =
new XElement("MyObj",
new XElement("Name", _name),
new Xelement("X", _x),
new Xelement("Y", _y)
);
element.WriteTo(writer);
}
我的实际实现显然更复杂,以至于我觉得linq-to-xml结构更简单、可读性更强。以上内容可以接受吗?
第一个实现不会生成与第二个实现相同的xml。您应该按照如下方式编写第二个实现,以匹配第一个实现生成的xml:
public void WriteXml(XmlWriter writer)
{
new XElement("Name", _name).WriteTo(writer);
new XElement("X", _x).WriteTo(writer);
new XElement("Y", _y).WriteTo(writer);
}
此外,当你打电话给时
writer.WriteElementString("X", _x.ToString());
根据x的类型(例如,如果x的类型是DateTime),结果可能不符合XML,并且容易受到不正确解析的影响,因此第二种实现更好,至少在这方面是这样。
我从一个Nutshell中的C#5中得到了一些信息。