我正在使用一个类库,它将一些配置表示为.xml文件。 使用 XmlSerializer
读取配置。 幸运的是,代表 .xml 的类使用 XmlAnyElement
属性,使我能够在不修改原始类库的情况下扩展自己的配置数据。
<?xml version="1.0" encoding="utf-8"?>
<Config>
<data>This is some data</data>
<MyConfig>
<data>This is my data</data>
</MyConfig>
</Config>
这对反序列化非常有效。我可以让类库像平常一样反序列化 .xml 文件,然后使用自己的 XmlSerializer
实例和一个针对内部 XmlNode
的 XmlNodeReader
。
public class Config
{
[XmlElement]
public string data;
[XmlAnyElement]
public XmlNode element;
}
public class MyConfig
{
[XmlElement]
public string data;
}
class Program
{
static void Main(string[] args)
{
using (Stream fs = new FileStream(@"c:\temp\xmltest.xml", FileMode.Open))
{
XmlSerializer xser1 = new XmlSerializer(typeof(Config));
Config config = (Config)xser1.Deserialize(fs);
if (config.element != null)
{
XmlSerializer xser2 = new XmlSerializer(typeof(MyConfig));
MyConfig myConfig = (MyConfig)xser2.Deserialize(new XmlNodeReader(config.element));
}
}
}
我需要创建一个实用程序,允许用户生成一个新的配置文件,该文件包括类库配置和我的自定义配置,因此会创建新的对象,这些对象没有从.xml文件中读取。问题是如何将数据序列化回.xml?我意识到我必须首先在我的数据上调用XmlSerializer.Serialize
方法,然后再在类库配置上调用相同的方法。但是,这要求在调用Serialize
后使用XmlNode
表示我的数据。使用XmlSerializer
将对象序列化为XmlNode
的最佳方式是什么?谢谢,Kevin顺便说一句 - 看起来Microsoft曾经提供由Chris Lovett编写的
XmlNodeWriter
类,但现在链接已经失效了。有人知道其他可以获取此类的位置吗?
doc.DocumentElement
返回所需的XmlNode
。 - tm1