2013-10-02 108 views
2

我嘗試反序列化XML文件:C#反序列化XML文件

<?xml version="1.0" encoding="utf-8"?> 
<XmlFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <OBJECTS ITEM="ItemValue" TABLE_NAME="TableExample"> 
    </OBJECTS> 
</XmlFile> 

我反序列化類的代碼看起來像這樣:

[Serializable] 
[XmlRoot("XmlFile")] 
public class SerializeObject 
{ 

    [XmlAttribute("ITEM")] 
    public string Item { get; set; } 

    [XmlAttribute("TABLE_NAME")] 
    public string Table_Name { get; set; } 
} 

當我嘗試反序列化的XML文件,我總是得到任何錯誤,項目和Table_Name等於null。爲什麼?

THX重播

+0

更多代碼將是有用的。我猜看提供的信息是:你沒有指定「OBJECTS」元素。您的類定義了「XmlFile/@ ITEM」和「XmlFile/@ TABLE_NAME」,而XML之間有一個「OBJECTS」元素。 –

+0

我看到使用「Serializable」屬性(用於RunTime序列化程序)以及使用用於XmlSerializer的「XmlRoot/XmlAttribute」屬性。你在使用哪一個? –

回答

7
[XmlRoot("XmlFile")] 
public class SerializableContainer 
{ 
    [XmlElement("OBJECTS")] 
    public SerializeObject[] Objects { get; set; } 
} 

public class SerializeObject 
{ 
    [XmlAttribute("ITEM")] 
    public string Item { get; set; } 

    [XmlAttribute("TABLE_NAME")] 
    public string Table_Name { get; set; } 
} 

然後你反序列化:

var serializer = new XmlSerializer(typeof(SerializableContainer)); 

using (var file = File.OpenText("sample.xml")) 
{ 
    var data = (SerializableContainer)serializer.Deserialize(file); 

    // ... 
} 
+0

謝謝。現在我知道我犯了什麼錯誤。 – user2838148

+3

不客氣。請將我的答案標記爲已接受。 –