将 KnownTypes 应用于 class 本身而不是 service/contract

Applying KnownTypes to class itself instead of service/contract

根据 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' contains data from a type that maps to the name 'http://schemas.datacontract.org/2004/07/SCS.Domain.FormsAndRecordsManagement.Contract.Base:A”。反序列化器不知道映射到该名称的任何类型。考虑使用 DataContractResolver 或将对应于 'A' 的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将其添加到传递给 DataContractSerializer 的已知类型列表中。

你做错了。 KnownType 允许您提前指定在反序列化期间应考虑的类型。

[KnownType(typeOf())] attribute is use as annotation to include the other dependency of contract with other object.

示例,如果 class B 依赖于 class A 你应该这样注释 class B:

[DataContract]
public class A : ISomeInterface
{

}

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