0

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

4

1 回答 1

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),因此至少在这方面,第二种实现更好。

我从 C# 5 in a Nutshell 得到了一些信息。

于 2014-01-13T01:56:53.693 回答