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

时间:2013-05-21 07:36:54

标签: c# xml-serialization

这可能听起来像是来自其他主题的重复问题,但它在接口定义中推迟。

我有一个接口,比方说名为 IClass1 ,其定义中包含接口列表,例如 IClass2

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

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

class Class2:IClass2
{
    ...whatever properties
}

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

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

1 个答案:

答案 0 :(得分:1)

如果您正在使用DataContracts,则可以使用KnownTypeAttribute为反序列化器提供反序列化时应使用的一种或多种类型的列表。

version that takes a string parameter允许您指定将返回一系列类型的方法的名称,在某些情况下可以更容易使用。

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