反序列化XmlDocument的最短方法

时间:2015-02-02 17:30:46

标签: c# xml .net-4.5 .net-4.6

我正在寻找一种简洁的方法来反序列化XmlDocument对象。我发现最接近的是this,但我真的很想知道是否有更好的方法(在.NET 4.5甚至4.6中),因为我已经有了XmlDocument。

所以目前看起来如下:

// aciResponse.Data is a XmlDocument
MyClass response;
using (XmlReader reader = XmlReader.Create((new StringReader(aciResponse.Data.InnerXml))))
{
    var serializer = new XmlSerializer(typeof(MyClass));
    response =  (MyClass)serializer.Deserialize(reader);
}

感谢您提出更好的建议!

3 个答案:

答案 0 :(得分:11)

您可以放弃XmlReader并改为使用TextReader并使用TextReader XmlSerializer.Deserialize Method重载。

工作示例:

void Main()
{
   String aciResponseData = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><tag><bar>test</bar></tag>";
   using(TextReader sr = new StringReader(aciResponseData))
   {
        var serializer = new System.Xml.Serialization.XmlSerializer(typeof(MyClass));
        MyClass response =  (MyClass)serializer.Deserialize(sr);
        Console.WriteLine(response.bar);
   }
}

[System.Xml.Serialization.XmlRoot("tag")]
public class MyClass
{
   public String bar;
}

答案 1 :(得分:6)

如果您已有XmlDocument个对象,则可以使用XmlNodeReader

MyClass response = null;
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
using (XmlReader reader = new XmlNodeReader(aciResponse.Data))
{
    response = (MyClass)serializer.Deserialize(reader);
}

答案 2 :(得分:6)

有一种更好,更懒惰的方法。但只有在使用Visual Studio时才有可能。

步骤:

  1. 打开Visual Studio并创建一个新的类文件(比如Sample1.cs)。现在 从此类文件中删除示例类定义。
  2. 将XML文件复制到剪贴板(Ctrl + A,Ctrl + C)
  3. 在Visual Studio中,转到“编辑”菜单并选择“#34;粘贴特殊&#34; - &gt;&#34;将XML粘贴为类&#34;。
  4. 完成。 Visual Studio将生成反序列化此XML所需的所有类定义。