当前位置:  开发笔记 > 编程语言 > 正文

在C#中将XML反序列化为对象

如何解决《在C#中将XML反序列化为对象》经验,为你挑选了3个好方法。

所以我有xml看起来像这样:


  #{id}
  #{name}
  #{description}
  #{project_id}
  #{milestone_id}
  #{position}

  
  #{private}

  
  #{tracked}

  
  
    
      ...
    
    
      ...
    
    ...
  

我将如何使用.NET的序列化库将其反序列化为C#对象?

目前我正在使用反射,我使用命名约定在xml和我的对象之间进行映射.



1> Dan Goldstei..:

为每个元素创建一个类,每个元素具有每个元素的属性,并为每个子元素创建一个List或Array对象(使用创建的对象).然后对字符串调用System.Xml.Serialization.XmlSerializer.Deserialize并将结果转换为对象.使用System.Xml.Serialization属性进行调整,例如将元素映射到ToDoList类,使用XmlElement("todo-list")属性.

shourtcut是将XML加载到Visual Studio中,单击"推断架构"按钮并运行"xsd.exe/c schema.xsd"以生成类.xsd.exe位于tools文件夹中.然后浏览生成的代码并进行调整,例如在适当的地方将短路更改为整数.


在VS 2012及更高版本中,您还可以在"编辑"菜单中"将XML粘贴为类".
`编辑>选择粘贴>将XML粘贴为类`非常好,@ JonathanAllen,正是我需要的.
在VS2010中,它被称为"创建模式",可能会生成多个xsd文件(每个名称空间一个).在这种情况下,请包含命令中的那些,即运行"xsd.exe/c schema.xsd schema1.xsd"(等).

2> Steve Horn..:

归结为使用VS中的工具中的xsd.exe:

xsd.exe "%xsdFile%" /c /out:"%outDirectory%" /l:"%language%"

然后用读取器和反序列化器加载它:

public GeneratedClassFromXSD GetObjectFromXML()
{
    var settings = new XmlReaderSettings();
    var obj = new GeneratedClassFromXSD();
    var reader = XmlReader.Create(urlToService, settings);
    var serializer = new System.Xml.Serialization.XmlSerializer(typeof(GeneratedClassFromXSD));
    obj = (GeneratedClassFromXSD)serializer.Deserialize(reader);

    reader.Close();
    return obj;
}



3> Keith..:

反序列化任何对象,只要该类型T标记为Serializable:

function T Deserialize(string serializedResults)
{
    var serializer = new XmlSerializer(typeof(T));
    using (var stringReader = new StringReader(serializedResults))
        return (T)serializer.Deserialize(stringReader);
}

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有