我正在尝试将以下xml结构反序列化为对象...
<?xml version="1.0" encoding="utf-8"?>
<xmlRoot>
<nest1>
<element1>A</element1>
<nest2>
<element2>aqbc</element2>
<element3>vjd</element3>
</nest2>
</nest1>
</xmlRoot>
它没有架构,我无法改变它。现在我遇到了将这种结构放入班级形式的问题....
我唯一感兴趣的信息是nest2中的元素值。我的C#类看起来如下......
/// <summary>
/// Summary description for FirstResponse
/// </summary>
[Serializable]
[System.Xml.Serialization.XmlRoot("nest2")]
public class FirstResponse
{
[System.Xml.Serialization.XmlElement("element2")]
public string Element2{ get; set; }
[System.Xml.Serialization.XmlElement("element3")]
public string Element3{ get; set; }
}
使用下面的代码,我收到一个异常,或者我只是得到一个空的对象......
FirstResponse response = null;
try
{
XmlSerializer serializer = new XmlSerializer(typeof(FirstResponse));
StringReader reader = new StringReader(xmlString);
response = (FirstResponse)serializer.Deserialize(reader);
reader.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
return response;
如果我将XmlRoot设置为'nest2',我会收到异常; “没想到。”如果我将该值更改为'xmlRoot',我会得到一个空对象......
我真的不确定我在哪里出错....
答案 0 :(得分:2)
两步过程:
获取您的XML并在其上运行xsd.exe
(在c:\Program Files\Microsoft SDKs\Windows\v7.0a\Bin
中找到 - 或在x64操作系统上找到c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0a\Bin
):
xsd.exe yourfile.xml
这会生成XML架构文件yourfile.xsd
获取该XSD文件并再次运行xsd.exe
,/c
选项:
xsd.exe /c yourfile.xsd
这会产生一个C#文件yourfile.cs
,它表示XML文件结构到C#类的1:1映射,您应该能够将该XML文件反序列化为C#对象