2013-10-02 161 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

不客气。请将我的答案标记为已接受。 –