我正在使用WCF来检索对象的集合.这些对象都是ProcedureText类型,但可以是子类SuspensionText或ResumptionText,它们都继承自ProcedureText.
public class ProcedureText { }
public class SuspensionText : ProcedureText { }
public class ResumptionText : ProcedureText { }
Run Code Online (Sandbox Code Playgroud)
我的OperationContract指定一个返回ProcedureText对象数组的方法:
[OperationContract]
[WebGet(UriTemplate = "procedureTexts")]
ProcedureText[] GetProcedureTexts();
Run Code Online (Sandbox Code Playgroud)
如果我将所有对象强制转换为ProcedureText但我想保留使用子类型的区别,这是有效的.我原本希望使用KnownType属性来执行此操作,并希望能够通过将其添加到我的ProcedureText类来实现:
[System.Runtime.Serialization.KnownType(typeof(SuspensionTextDto))]
[System.Runtime.Serialization.KnownType(typeof(ResumptionTextDto))]
public class ProcedureText { }
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为编译器无法解析System.Runtime.Serialization.KnownType.我从文档中知道该属性是.NET Framework 4的一部分,但我使用的是.NET Framework 4,这是我项目的Target Frameweork.
为什么我需要设置为能够使用该属性?
默认情况下不添加包含该类型的相关DLL.您需要添加一个引用:
System.Runtime.Serialization
用法在文档中描述:
http://msdn.microsoft.com/en-us/library/system.runtime.serialization.knowntypeattribute.aspx
基本上它是这样串行器识别类型.您的服务合同返回基类的数组,但该数组中的类型可能更多派生.如果没有告诉序列化程序,我认为序列化将失败.
| 归档时间: |
|
| 查看次数: |
3094 次 |
| 最近记录: |