将KnownTypes应用于类本身而不是服务/合同

时间:2015-08-05 07:04:06

标签: c# wcf serialization deserialization

根据MSDN KnownTypes指定服务在序列化或反序列化时使用的已知类型。 我正在尝试使用 DataContractSerializer 进行序列化。

[KnownType(typeOf(A))]
Class A: ISomeInterface
{

}

Class B: 
{
   public A{get;Set;}
} 

当我进行序列化时它的工作正常但是在异常时抛出异常 反序列化。

第1行位置420出错。元素“http://schemas.microsoft.com/2003/10/Serialization/Arrays:anyType”包含来自映射到名称“http://schemas.datacontract.org/2004/07/SCS.Domain.FormsAndRecordsManagement.Contract.Base:A”的类型的数据。反序列化器不知道映射到此名称的任何类型。考虑使用DataContractResolver或将与“A”对应的类型添加到已知类型列表中 - 例如,使用KnownTypeAttribute属性或将其添加到传递给DataContractSerializer的已知类型列表中。

1 个答案:

答案 0 :(得分:0)

你这样做是错误的。 KnownType允许您事先指定在反序列化期间应包括的类型。

  

[KnownType(typeOf())]属性用作注释,以包含契约与其他对象的其他依赖关系。

示例,如果B类依赖于A类,您应该像这样注释B类:

[DataContract]
public class A : ISomeInterface
{

}

[KnownType(typeOf(A))]
[DataContract]
public Class B: 
{
   [DataMember]
   public A { get; set;}
}