我正在使用一个类库,它代表了它在.xml中的一些配置。使用XmlSerializer
读取配置。幸运的是,表示.xml的类使用XmlAnyElement
属性,在该属性下允许我为自己的目的扩展配置数据,而无需修改原始类库。如何从调用XmlSerializer.Serialize创建XmlNode?
<?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
实例与XmlNodeReader
对内部XmlNode
。
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
btw--它看起来像由克里斯·洛维特写的XmlNodeWriter
类是可从微软有一段时间,但现在的链路断开。有没有人知道一个替代地点获得这个类?
`doc.DocumentElement `返回所需的`XmlNode`。 – tm1 2015-05-20 09:14:38