C# 反序列化XmlDocument的最短方法
我正在寻找一种简洁的方法来反序列化C# 反序列化XmlDocument的最短方法,c#,xml,.net-4.5,.net-4.6,C#,Xml,.net 4.5,.net 4.6,我正在寻找一种简洁的方法来反序列化XmlDocument对象。我发现的最接近的东西是,但我真的想知道是否有更好的方法来实现这一点(在.NET4.5甚至4.6中),因为我已经有了XmlDocument 目前情况如下: // aciResponse.Data is a XmlDocument MyClass response; using (XmlReader reader = XmlReader.Create((new StringReader(aciResponse.Data.InnerXml)
XmlDocument
对象。我发现的最接近的东西是,但我真的想知道是否有更好的方法来实现这一点(在.NET4.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
而改用a,使用TextReader
重载
工作示例:
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;
}
void Main()
{
字符串aciResponseData=“测试”;
使用(TextReader sr=新的StringReader(aciResponseData))
{
var serializer=new System.Xml.Serialization.XmlSerializer(typeof(MyClass));
MyClass响应=(MyClass)序列化程序。反序列化(sr);
Console.WriteLine(response.bar);
}
}
[System.Xml.Serialization.XmlRoot(“标记”)]
公共类MyClass
{
公共字符串栏;
}
如果您已经有了一个XmlDocument
对象而无法使用
有一种更好、更懒惰的方法可以做到这一点。但只有在使用VisualStudio时才有可能 步骤:
完成了。Visual Studio将生成反序列化此XML所需的所有类定义。您能否确切地说明您认为什么可能构成一种更好的/
更干净的方法?好的,这可能不涉及创建/打开两个不同的读卡器和使用InnerXml(字符串)?这就是方法和扩展方法的用途,如果您正在执行大量相同的代码,请提取到函数。。。在我看来,这段代码相当简洁;所以可能更具体一点。也许真的没有“更好”的解决方案-但这就是我想在这里找到的;-)好吧,这至少是一个简短的解决方案:)不过,如果有更多的建议,我会等待。在我的例子中,我发现XmlNodeReader比使用XmlReader+StringReader快5倍
MyClass response = null;
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
using (XmlReader reader = new XmlNodeReader(aciResponse.Data))
{
response = (MyClass)serializer.Deserialize(reader);
}