如何从调用XmlSerializer.Serialize创建XmlNode?

Kev*_*vin 12 c# xml

我正在使用一个类库,它代表了.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>
Run Code Online (Sandbox Code Playgroud)

这适用于反序列化.我能够允许类库正常反序列化.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));
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我需要创建一个实用程序,允许用户生成一个新的配置文件,其中包括类库配置以及我自己的配置,因此将创建未从.xml文件中读取的新对象.问题是我如何将数据序列化回.xml?

我意识到XmlSerializer.Serialize在调用类库配置上的相同方法之前,我必须先调用我的数据.但是,这要求我的数据由XmlNode后调用表示Serialize.将对象序列化为XmlNode使用的最佳方法是XmlSerializer什么?

谢谢,

-kevin

顺便说一下,看起来像克里斯洛维特写的XmlNodeWriter课程曾经是微软同时提供的,但链接现在已经破了.有没有人知道另一个获得此课程的位置?

Ed *_*ehm 12

因此,您需要让您的类包含自定义配置信息,然后将该类序列化为XML,然后将该序列化XML转换为XML节点:是吗?

您可以只使用XMLSerializer创建的字符串并将其包装在自己的XML标记中吗?

XmlSerializer xs = new XmlSerializer(typeof(MyConfig));
StringWriter xout = new StringWriter();
xs.Serialize(xout, myConfig);
XmlDocument x = new XmlDocument();
x.LoadXml("<myConfig>" + xout.ToString() + "</myConfig>");
Run Code Online (Sandbox Code Playgroud)

现在x是一个XmlDocument,其中包含一个元素"<myconfig>",其中包含序列化的自定义配置.

这就是你要找的东西吗?