所以我的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和我的对象之间进行映射。
发布于 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。
发布于 2008-10-22 16:38:53
归结为在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;
}
发布于 2012-09-24 05:19:08
反序列化任何对象,只要类型T
被标记为可序列化:
function T Deserialize<T>(string serializedResults)
{
var serializer = new XmlSerializer(typeof(T));
using (var stringReader = new StringReader(serializedResults))
return (T)serializer.Deserialize(stringReader);
}
https://stackoverflow.com/questions/226599
复制相似问题