反序列化 XmlDocument 的最短方法

问题描述 投票:0回答:3

我正在寻找一种干净而简短的方法来反序列化

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);
}

感谢您提供更好的想法!

c# xml .net-4.5 .net-4.6
3个回答
24
投票

如果您已经有一个

XmlDocument
对象,那么您可以使用
XmlNodeReader

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

21
投票

您可以放弃

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;
}

13
投票

有一种更好且懒惰的方法可以做到这一点。但只有使用 Visual Studio 才有可能。

步骤:

  1. 打开 Visual Studio 并创建一个新的类文件(例如 Sample1.cs)。现在 从该类文件中删除示例类定义。
  2. 将 XML 文件复制到剪贴板(Ctrl+A、Ctrl+C)
  3. 在 Visual Studio 中,转到“编辑”菜单并选择“选择性粘贴”->“将 XML 粘贴为类”。

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

© www.soinside.com 2019 - 2024. All rights reserved.