使用接口而不是具体类型IEnumerable导致异常

时间:2011-10-10 13:30:02

标签: c# .net serialization

最好使用接口而不是简洁类型,因此我们的应用程序将具有模块化和自由使用任何所需类型(只要它实现接口);

因此,在我的Worker对象中,我创建了一个名为CarNumbers的成员,其类型为IEnumerable:

[DataContract(Namespace = "", Name = "Worker")]
public class Worker {
    ....
    ....
    [DataMember(IsRequired = false, Name = "CarNumbers")]
    public IEnumerable<string> CarNumbers  { get; set; }
    ....
}

现在我正在尝试将Worker对象序列化为XML,我得到了异常:

  

无法序列化System.Collections.Generic.IEnumerable`1 [[string]]类型的成员Worker.CarNumbers,因为它是一个接口。

如何在不破坏独立性和使用concrate类型的情况下解决此异常?

1 个答案:

答案 0 :(得分:1)

这取决于序列化器。通常,序列化需要能够创建具体类型(否则,在反序列化时如何知道实际创建的内容?您无法创建仅仅是接口的实例...)因此您必须泄漏一些抽象某处。

所有人都说,使用NetDataContractSerializer可以让你从代码的角度做你想做的事,尽管它所做的只是在序列化输出中保留了必要的具体类型。