首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将XML反序列化为C#中的对象

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

Stack Overflow用户
提问于 2008-10-22 16:36:02
回答 5查看 99.6K关注 0票数 54

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

代码语言:javascript
复制
<todo-list>
  <id type="integer">#{id}</id>
  <name>#{name}</name>
  <description>#{description}</description>
  <project-id type="integer">#{project_id}</project-id>
  <milestone-id type="integer">#{milestone_id}</milestone-id>
  <position type="integer">#{position}</position>

  <!-- if user can see private lists -->
  <private type="boolean">#{private}</private>

  <!-- if the account supports time tracking -->
  <tracked type="boolean">#{tracked}</tracked>

  <!-- if todo-items are included in the response -->
  <todo-items type="array">
    <todo-item>
      ...
    </todo-item>
    <todo-item>
      ...
    </todo-item>
    ...
  </todo-items>
</todo-list>

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

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-10-22 16:42:35

为每个元素创建一个类,该类为每个元素创建一个属性,并为每个子元素创建一个对象列表或数组(使用创建的对象)。然后对字符串调用System.Xml.Serialization.XmlSerializer.Deserialize,并将结果转换为您的对象。使用System.Xml.Serialization属性进行调整,就像将元素映射到ToDoList类一样,使用XmlElement("todo-list")属性。

一个快捷方法是将XML加载到Visual Studio中,单击“推断模式”按钮,然后运行"xsd.exe /c schema.xsd“来生成类。xsd.exe位于tools文件夹中。然后检查生成的代码并进行调整,例如在适当的地方将shorts更改为int。

票数 59
EN

Stack Overflow用户

发布于 2008-10-22 16:38:53

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

代码语言:javascript
复制
xsd.exe "%xsdFile%" /c /out:"%outDirectory%" /l:"%language%"

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

代码语言:javascript
复制
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;
}
票数 37
EN

Stack Overflow用户

发布于 2012-09-24 05:19:08

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

代码语言:javascript
复制
function T Deserialize<T>(string serializedResults)
{
    var serializer = new XmlSerializer(typeof(T));
    using (var stringReader = new StringReader(serializedResults))
        return (T)serializer.Deserialize(stringReader);
}
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/226599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档