0

我想下面的XML結構反序列化到一個對象...deserialise 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」我得到一個空對象...

我真的不知道在哪裏我已經錯了這裏....

回答

2

兩個步驟:

  1. 把你的XML並運行xsd.exe(在c:\Program Files\Microsoft SDKs\Windows\v7.0a\Bin發現 - 在x64 OS或c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0a\Bin)就可以了:

    xsd.exe yourfile.xml 
    

    這將導致一個XML schema文件yourfile.xsd

  2. 採取XSD文件並再次運行它xsd.exe,將在/c選項:

    xsd.exe /c yourfile.xsd 
    

    這將導致一個C#文件yourfile.cs它代表一個1:你的XML文件結構的1映射成C#類,您應該可以使用它將該XML文件反序列化爲C#對象

+0

非常感謝此過程!它有點臃腫,但我可以把它拿出很多!謝謝!! – Roooss

+1

@Roooss:這不完美 - 但這是一個很好的起點! –