使用LINQ to XML实现IXmlSerializable

时间:2013-08-27 14:27:49

标签: c# linq-to-xml ixmlserializable

我觉得这可能是重复的,但我找不到我正在寻找的确切答案。我正在对象上实现 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 结构更简单,更易读。以上是否可以接受?

1 个答案:

答案 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获得了一些这样的信息。