将xml反序列化为IList c#
本文关键字:IList 反序列化 xml | 更新日期: 2023-09-27 18:27:52
我试图将一些xml反序列化为IList,但遇到了问题。这就是我迄今为止所做的:
XML:
<?xml version="1.0" encoding="utf-8"?>
<Animals>
<Animal>
<Name>Cow</Name>
<Color>Brown</Color>
</Animal>
</Animals>
型号:
[XmlRoot("Animals")]
public class Model
{
[XmlElement("Animal")]
public IList<Animal> AnimalList { get; set; }
}
public class Animal
{
[XmlElement("Name")]
public string Name{ get; set; }
[XmlElement("Color")]
public string Color{ get; set; }
}
反序列化:
FileStream fs = new FileStream("file.xml", FileMode.Open);
XmlReader xml = XmlReader.Create(fs);
XmlSerializer ser = new XmlSerializer(typeof(List<Model>));
var list = (List<Model>)ser.Deserialize(xml);
运行上面的代码时,我得到一个无效的操作异常。我做错了什么?
谢谢,James Ford
试试看:
// Create a new XmlSerializer instance with the type of the test class
XmlSerializer SerializerObj = new XmlSerializer(typeof(List<Model>));
// Create a new file stream for reading the XML file
FileStream ReadFileStream = new FileStream(@"C:'file.xml", FileMode.Open, FileAccess.Read, FileShare.Read);
// Load the object saved above by using the Deserialize function
List<Model> LoadedObj = (List<Model>)SerializerObj.Deserialize(ReadFileStream);
// Cleanup
ReadFileStream.Close();
问题是您使用的是IList<Animal>
。您需要使用List<Animal>
,以便它知道要使用的特定类型。
编辑:在LINQPad中使用以下代码可以完美地工作。唯一的区别是,我通过字符串而不是文件加载XML,但即使更改为文件,它也能正常工作。我刚刚添加了用于System.Xml.Serialization.的
void Main()
{
string xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
<Animals>
<Animal>
<Name>Cow</Name>
<Color>Brown</Color>
</Animal>
</Animals>";
XmlReader reader = XmlReader.Create(new StringReader(xml));
XmlSerializer ser = new XmlSerializer(typeof(Model));
var list = (Model)ser.Deserialize(reader);
list.Dump();
}
// Define other methods and classes here
[XmlRoot("Animals")]
public class Model
{
[XmlElement("Animal")]
public List<Animal> AnimalList { get; set; }
}
public class Animal
{
[XmlElement("Name")]
public string Name{ get; set; }
[XmlElement("Color")]
public string Color{ get; set; }
}
我认为您需要将XmlSerializer更改为:
XmlSerializer ser = new XmlSerializer(typeof(Model));
在尝试序列化模型列表之前,您希望将XML文件序列化为一个模型,该模型包含一系列内容。
此外,您需要将ObjectList定义更改为
public List<Animal> AnimalList { get; set; }