我觉得这可能是重复的,但我找不到我正在寻找的确切答案。我正在对象上实现 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 结构更简单,更易读。以上是否可以接受?
答案 0 :(得分:2)
第一个实现不会生成与第二个实现相同的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());
结果可能是非XML兼容的,并且容易受到错误的解析,这取决于_x类型(例如,如果_x的类型是DateTime),所以第二种实现更好,至少在这方面。
我在Nutshell中从C#5获得了一些这样的信息。