gpt4 book ai didi

c# - XML 反序列化 : working with list

转载 作者:太空宇宙 更新时间:2023-11-03 11:10:47 24 4
gpt4 key购买 nike

我有以下 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,也看看它。

您还需要将 Metadata 属性添加到 ExportDefinition,并在列表属性上使用 EmlElement("Field")]Metadata 中。

或者更简单地说,完全删除 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com