我需要反序列化下列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