我正在尝试将一个声明为ILIst的对象序列化到Xml文件中,但它是List的一个实例。异常告诉我原因:您无法序列化接口。
这在我的设计中是非常必要的,或者我还有什么方法可以序列化它?
答案 0 :(得分:2)
您必须知道要实例化的具体类型。
序列化程序必须使用元数据,而不是运行时类型。如果您只知道您的目标对象必须实现IList,那么您将构建什么?甚至没有一个类实现它。
答案 1 :(得分:1)
这应该不是问题,你总是可以使用object.GetType()。这是一个例子:
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
class Program {
static void Main(string[] args) {
System.Collections.IList list = new List<int> { 1, 2, 3 };
var ser = new XmlSerializer(list.GetType());
ser.Serialize(Console.Out, list);
Console.ReadLine();
}
}
答案 2 :(得分:1)
我认为您需要使用 IList 保持设计的原因是因为它是其他模块的通用接口。一种可能的解决方案:
而不是:
[XmlElement("Test")]
public IList<String> Tests
{
get;
set;
}
您可以尝试:
[XmlElement("Test")]
public List<String> TestList
{
get;
set;
}
[XmlIgnore]
public IList<String> Tests
{
get { return TestList; }
}
通过这种方式,您可以保持相同的界面,同时利用.Net Xml库中的序列化/反序列化功能。
答案 3 :(得分:0)
我可以看到两个选项:
答案 4 :(得分:0)
您无法序列化接口,因为它不包含任何数据。您可以做的最好的事情就是实现ISerializable来自行控制序列化。