c# - 什么时候适合使用 KnownType 属性?

标签 c# wcf known-types

看了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/

相关文章:

c# - 在 Windows 服务中等待线程停止

c# - 在新创建的迭代中保存 WorkItem#IterationPath

WCF 跟踪和消息日志记录 - 跟踪级别警告

java - 基于日内瓦的 STS,Java 互操作

wcf - 如何从外部配置文件添加服务已知类型

c# - Entity Framework 5 : Get Auto_Increment value before insert

c# - 捕获第二次鼠标移动

asp.net - .NET Remoting vs. Web Services vs. Windows Communication Foundation (WCF)

.net - 在WCF中使用KnownType和ServiceKnownType有什么区别?