看了MSDN引用,对于什么时候使用KnownType属性,我还是有疑问。我知道该属性将类型信息传递给序列化程序,但什么时候需要这样做?当被序列化的类具有基类类型的引用并且存在可以设置为这些引用的向上转换派生类时是否合适?
此外,过度使用该属性是否有任何缺点?例如,在前面的示例中,如果序列化类被标记为 KnownType(baseClass),即使存在对该类型的显式引用?
最佳答案
需要
[KnownType]
来告诉它有关子类型的信息。 不使用它的缺点是以下将不起作用:
[DataContract]
class Foo {}
[DataContract]
class Bar : Foo {}
使用 WCF 接口(interface)上的方法返回:
public Foo GetFoo() { return new Bar(); }
如果没有该属性,序列化程序(尤其是对于 mex/proxy 生成的类型)将不知道 Bar
,并且会失败。具有属性:
[DataContract, KnownType(typeof(Bar))]
class Foo {}
它会起作用。这仅适用于 DataContractSerializer
- 使用 NetDataContractSerializer
您可以以不同的方式获取类型数据。
关于c# - 什么时候适合使用 KnownType 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3167932/