我需要反序列化下列XML到C#類:XML反序列化問題在C#
<NodeConfiguration>
<DBChange value="2022"/>
<DBChange value="555" />
<DBChange value="12:00" />
</NodeConfiguration>
要做到這一點,我構建了以下類:
[XmlType("NodeConfiguration")]
public class NodeConfigurationSerialize
{
public NodeConfigurationSerialize()
{
}
[XmlElement("DBChange")]
public DBChange[] ChangeList { get; set; }
}
和:
public class DBChange : StringSerializable<DBChange>, IEquatable<DBChange>, IXmlSerializable
{
private string mValue;
public string Value
{
get { return mValue; }
set { mValue = value; }
}
public void ReadXml(System.Xml.XmlReader reader)
{
mValue = reader.GetAttribute("value");
}
public void WriteXml(System.Xml.XmlWriter writer)
{
writer.WriteAttributeString("value", mValue);
}
}
問題是,無論什麼時候我試圖使用下面的方法反序列化這個類:
Deserialize<NodeConfigurationSerialize>(xml, null);
我得到一個無效的XML錯誤。
我該如何編寫我的DBChange和NodeConfigurationSerialize類,以便我可以從上面的XML中成功反序列化它們?
PS:我使用Visual Studio 2010和.NET Framework 4.0
編輯1:
我已經改變了我NodeConfigurationSerialize類:
[XmlType("NodeConfiguration")]
public class NodeConfigurationSerialize
{
public NodeConfigurationSerialize()
{
ChangeList = new List<DBChange>();
}
[XmlElement("DBChange")]
public List<DBChange> ChangeList { get; set; }
}
而且我已經也做@woni建議並添加reader.Read();到我的DBChange類的ReadXml方法。之後,一切正常!
謝謝大家的回答!
嘗試在內存中創建對象並對其進行序列化。然後你可以看到xml應該是什麼樣子的結構。 – 2012-01-27 17:26:10
你有沒有在文件中的XML標頭? – craig1231 2012-01-27 17:29:48