我有以下 XML 文件格式。我想将以下内容反序列化为对象,但它不起作用。我在反序列化“Field”时遇到问题。
<ExportDefinition>
<DestinationDir>C:\Export\</DestinationDir>
<LevelID>102</LevelID>
<Metadata>
<Field>
<Source>CreateDate</Source>
<DataType>DateTime</DataType>
<Field>
<Field>
<Source>UserName</Source>
<DataType>Text</DataType>
<Field>
</Metadata>
</ExportDefinition>
static void Main(string[] args)
{
string xmlFile = @"C:\cobra_exp_def.xml";
FileStream ReadFileStream = new FileStream(xmlFile, FileMode.Open, FileAccess.Read, FileShare.Read);
XmlSerializer SerializerObj = new XmlSerializer(typeof(ExportDefinition));
ExportDefinition LoadedObj = (ExportDefinition)SerializerObj.Deserialize(ReadFileStream);
ReadFileStream.Close();
}
public class ExportDefinition
{
[XmlElement]
public string DestinationDir { get; set; }
[XmlElement]
public string LevelID { get; set; }
}
public class Metadata
{
private List<Field> list = new List<Field>();
[XmlElement]
public List<Field> Metadata { get { return list; } set { list = value; } }
}
public class Field
{
[XmlElement]
public string Source { get; set; }
[XmlElement]
public string DataType { get; set; }
}
解决方案
最终成功实现以下功能:[XmlArray("Metadata"), XmlArrayItem("Field", typeof(Field))]
public List<Field> Metadata
{
get { return (_fields); }
set { _fields = value; }
}
private List<Field> _fields = new List<Field>();
最佳答案
InnerException
是:
"The 'Field' start tag on line 12 position 12 does not match the end tag of 'Metadata'. Line 13, position 5."
这是完全正确的; xml 无效。应该是:
<Field>
<Source>CreateDate</Source>
<DataType>DateTime</DataType>
</Field> <!-- EDITED HERE -->
<Field>
<Source>UserName</Source>
<DataType>Text</DataType>
</Field> <!-- EDITED HERE -->
始终查看InnerException
。如果有 InnerException
,也看看它。
您还需要向 ExportDefinition
添加 Metadata
属性,并在列表属性上使用 EmlElement("Field")]
在元数据
内。
或者更简单地说,完全删除 Metadata
类:
public class ExportDefinition
{
[XmlElement]
public string DestinationDir { get; set; }
[XmlElement]
public string LevelID { get; set; }
private List<Field> list = new List<Field>();
[XmlArray("Metadata")]
[XmlArrayItem("Field")]
public List<Field> Items { get { return list; } }
}
关于c# - XML反序列化: working with list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14122023/