将xml响应反序列化为自定义类

时间:2011-08-25 09:54:23

标签: .net xml serialization xml-serialization xml-deserialization

我正在尝试将以下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',我会得到一个空对象......

我真的不确定我在哪里出错....

1 个答案:

答案 0 :(得分:2)

两步过程:

  1. 获取您的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

  2. 获取该XSD文件并再次运行xsd.exe/c选项:

    xsd.exe /c yourfile.xsd
    

    这会产生一个C#文件yourfile.cs,它表示XML文件结构到C#类的1:1映射,您应该能够将该XML文件反序列化为C#对象