一尘不染

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

c#

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

<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和对象之间进行映射。


阅读 358

收藏
2020-05-19

共1个答案

一尘不染

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

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

2020-05-19