反序列化 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.
时才有可能
步骤:
- 打开 Visual Studio 并创建一个新的 class 文件(比如 Sample1.cs)。现在
从此 class 文件中删除示例 class 定义。
- 将您的 XML 文件复制到剪贴板(Ctrl+A、Ctrl+C)
- 在 Visual Studio 中,转到“编辑”菜单并 select "Paste Special"->"Paste XML as Classes"。
完成。 Visual Studio 将生成反序列化此 XML 所需的所有 class 定义。
我正在寻找一种简洁的方法来反序列化 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.
时才有可能步骤:
- 打开 Visual Studio 并创建一个新的 class 文件(比如 Sample1.cs)。现在 从此 class 文件中删除示例 class 定义。
- 将您的 XML 文件复制到剪贴板(Ctrl+A、Ctrl+C)
- 在 Visual Studio 中,转到“编辑”菜单并 select "Paste Special"->"Paste XML as Classes"。
完成。 Visual Studio 将生成反序列化此 XML 所需的所有 class 定义。