我在C#中使用XML反序列化存在一个奇怪的问题。序列化对象按预期工作,但反序列化使列表值属性Files
为空。
using System;
using System.Collections.Generic;
using System.Xml.Linq;
using System.Xml.Serialization;
using System.Text;
namespace Converter
{
[Serializable]
[XmlRoot("userinput")]
public class Input
{
[XmlArray("files")]
[XmlArrayItem(Type = typeof(FilePair), ElementName = "filepair")]
public List<FilePair> Files;
public Input()
{ }
}
}
和元素:
using System;
using System.Collections.Generic;
//using System.Linq;
using System.Text;
using System.Xml.Serialization;
namespace Converter
{
[Serializable]
public class FilePair
{
[XmlElement("file1")]
public string File1;
[XmlElement("file2")]
public string File2;
public FilePair() { }
}
public enum FileSource { Foo, Bar };
}
和示例XML:
<userinput>
<files>
<filepair>
<file1>foo</file1>
<file2>bar</file2>
</filepair>
<filepair>
<file1>foo</file1>
<file2>bar</file2>
</filepair>
</files>
</userinput>
答案 0 :(得分:0)
如果我接受您的代码,请修复[XmlElement("file2")]
,并使用:
var xml = @"<userinput>
<files>
<filepair>
<file1>foo</file1>
<file2>bar</file2>
</filepair>
<filepair>
<file1>foo</file1>
<file2>bar</file2>
</filepair>
</files>
</userinput>";
using (var reader = new StringReader(xml))
{
var obj = (Input)new XmlSerializer(typeof(Input)).Deserialize(reader);
foreach(var file in obj.Files)
{
Console.WriteLine($"{file.File1}, {file.File2}");
}
}
然后:它有效。输出是:
foo, bar
foo, bar
所以:无论问题是什么:你在创建最小样本时已经修复了它。
所以现在问题变成了:你的最小样本和真实代码之间有什么不同?回答这个问题,并且您将自己回答这个问题。