最好使用接口而不是简洁类型,因此我们的应用程序将具有模块化和自由使用任何所需类型(只要它实现接口);
因此,在我的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类型的情况下解决此异常?
答案 0 :(得分:1)
这取决于序列化器。通常,序列化需要能够创建具体类型(否则,在反序列化时如何知道实际创建的内容?您无法创建仅仅是接口的实例...)因此您必须泄漏一些抽象某处。
所有人都说,使用NetDataContractSerializer可以让你从代码的角度做你想做的事,尽管它所做的只是在序列化输出中保留了必要的具体类型。