Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 反序列化XmlDocument的最短方法_C#_Xml_.net 4.5_.net 4.6 - Fatal编程技术网

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时才有可能

步骤:

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

  • 完成了。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);
    }