我正在寻找一种干净而简短的方法来反序列化
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);
}
感谢您提供更好的想法!
如果您已经有一个
XmlDocument
对象,那么您可以使用 XmlNodeReader
MyClass response = null;
using (XmlReader reader = new XmlNodeReader(aciResponse.Data))
{
var serializer = new XmlSerializer(typeof(MyClass));
response = (MyClass)serializer.Deserialize(reader);
}
您可以放弃
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;
}
有一种更好且懒惰的方法可以做到这一点。但只有使用 Visual Studio 才有可能。
步骤:
完成。 Visual Studio 将生成反序列化此 XML 所需的所有类定义。