2012-10-25 67 views
1

我已經查看了同一個問題的其他幾個問題,但一直未能解決我的問題。我有類,代碼和XML如下。但是,在Deserialize調用之後,我的類型變量包含一個包含TestElement但TestElement爲null的TestList數組。感謝任何幫助。謝謝。反序列化XML元素返回null 3

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Xml.Serialization; 

namespace TestXMLSerialization 
{ 
    class Program 
    { 
     static void Main(string[] args) { 
      XmlSerializer ser = new XmlSerializer(typeof(TestRootElement)); 
      string xmlString = "<?xml version=\"1.0\" ?><TestRootElement><TestList><TestItem><TestElement>Test Data</TestElement></TestItem></TestList></TestRootElement>"; 
      TestRootElement type = (TestRootElement)ser.Deserialize(new StringReader(xmlString)); 

      Console.WriteLine(type.TestList[0].TestElement); 
     } 
    } 

    [Serializable()] 
    [System.Xml.Serialization.XmlRoot("TestRootElement")] 
    public class TestRootElement 
    { 
     [System.Xml.Serialization.XmlElement("TestList")] 
     public List<TestItem> TestList { get; set; } 
    } 

    [Serializable()] 
    [System.Xml.Serialization.XmlType("TestItem")] 
    public class TestItem 
    { 
     [System.Xml.Serialization.XmlElement("TestElement")] 
     public string TestElement { get; set; } 
    } 
} 
+4

您有太多'XmlRoot'屬性 - 文檔具有**一個**根,在本例中爲'TestRootElement'。 – Oded

+0

謝謝@Oded。但是,這似乎不是問題。我已經更正了使用XmlType的代碼,但仍然爲TestElement獲得了空值。 – oldegreyg

回答

2

原來的代碼工作正常,沒有任何序列化屬性。

public class TestRootElement 
{ 
    public List<TestItem> TestList { get; set; } 
} 

public class TestItem 
{ 
    public string TestElement { get; set; } 
} 

所以加的屬性回來一次一個我發現名單<>需要一個XmlArray屬性,而不是XmlElement的。

[Serializable()] 
[System.Xml.Serialization.XmlRoot("TestRootElement")] 
public class TestRootElement 
{ 
    [XmlArray("TestList")] 
    public List<TestItem> TestList { get; set; } 
} 

[Serializable()] 
[XmlType("TestItem")] 
public class TestItem 
{ 
    [XmlElement("TestElement")] 
    public string TestElement { get; set; } 
}