如何使用XmlWriter/XmlReader读写复杂对象

4

我一直在尝试寻找使用XmlReader/XmlWriter编写XML的简单方法。我不太喜欢使用“IXmlSerializable”接口,但是对于我的某些数据类,我别无选择。

无论如何,我想做的事情很简单:

private MyClass myObject;
public void WriteXml(XmlWriter writer)
{
    writer.WriteObject(myObject); // <-- this method doesn't exists
}

所以,我找到了两个解决方法:
  1. 编写自己的例程手动编写对象。这很荒谬,因为 .Net 已经做了这件事。
  2. 使用 StringWriter 创建新的序列化程序,并使用 WriteValue(string) 方法。
我还没有测试第二种方法,但我认为它可能会起作用(由于 ReadValue 的结果不确定)。
那么我的问题是:我是否遗漏了重要的东西,或者这是唯一的方法?还是有更好的方法来处理这个问题?
谢谢。

你看过 LINQ to XML 吗?虽然需要一些工作,但效果很好。 - Pieter
是的,我知道这个想法,但从未使用过。但我的问题在于,我的复杂对象有许多子对象,每个子对象都定义了 XmlAttributes。因此,我需要读取这些属性。我只是不想盲目地编写元素。 - Sauleil
2个回答

6

玩了一会儿后,我发现了一个非常简单的方法。以下是我正在使用的代码,供那些想知道我如何解决问题的人参考(读取和元素同理):

    public static void WriteElement(XmlWriter writer, string name, object value)
    {
        var serializer = new XmlSerializer(value.GetType(), new XmlRootAttribute(name));
        serializer.Serialize(writer, value);
    }

我不知道为什么我一直把问题复杂化了,但是现在它变得比那更简单。

0
尝试使用XmlDocument类。它以XmlNode为基础,方便地编写xml。您还可以序列化类,或使用DataSet类编写xml,或将其读回数据集或XmlDocument类型结构中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接