使用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结构更简单、可读性更强。以上内容可以接受吗?

使用LINQ to XML实现IXmlSerializable

第一个实现不会生成与第二个实现相同的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中得到了一些信息。