反序列化 XmlDocument 的最短方法

Shortest way to deserialize XmlDocument

我正在寻找一种简洁的方法来反序列化 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);
}

谢谢你的好主意!

您可以放弃 XmlReader 并使用 TextReader instead and use the 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;
}

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

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

有一个更好的懒惰的方法来做到这一点。但只有当您使用 Visual Studio.

时才有可能

步骤:

  1. 打开 Visual Studio 并创建一个新的 class 文件(比如 Sample1.cs)。现在 从此 class 文件中删除示例 class 定义。
  2. 将您的 XML 文件复制到剪贴板(Ctrl+A、Ctrl+C)
  3. 在 Visual Studio 中,转到“编辑”菜单并 select "Paste Special"->"Paste XML as Classes"。

完成。 Visual Studio 将生成反序列化此 XML 所需的所有 class 定义。