序列化具有另一个接口列表定义的接口实例

本文关键字:接口 定义 实例 列表 序列化 另一个 | 更新日期: 2023-09-27 18:14:48

这听起来像是在其他主题中反复出现的问题,但它在接口定义中有所保留。

我有一个接口,比如命名为IClass1,它在定义中包含一个接口列表,比如IClass2

我有一个业务单元来实现这个接口;实现自然会像这样

class Class1: IClass1
{
    ....whatever properties
    List<IClass2> DataItems { get; set; }
}
class Class2:IClass2
{
    ...whatever properties
}

问题是,XmlSerializer会抱怨Class1中的列表,因为它是一个接口!所以我的问题是:简单地说,我总是知道DataItems列表中应该反序列化的实例的类型是什么,它将是Class2类型,如何告诉我的XML序列化器?

我见过很多变通方法,我认为在序列化/反序列化过程中使用虚拟属性并忽略接口列表是最合适的方法,我当然不想发明自己的序列化器或在我的类中重新实现序列化

序列化具有另一个接口列表定义的接口实例

如果您正在使用DataContracts,您可以使用KnownTypeAttribute给反序列化器一个它在反序列化时应该使用的一个或多个类型的列表。

接受字符串形参的版本允许您指定返回类型序列的方法的名称,这在某些情况下更容易使用。

我给出的链接在页面末尾有一些示例代码。