我有以下服务接口
[ServiceContract]
public interface ICacheService
{
[OperationContract]
IEnumerable<CacheResponse> GetCache(IEnumerable<CacheRequest> requests);
}
[DataContract]
[KnownType(typeof(CacheItem))]
[KnownType(typeof(TreeItem))]
[KnownType(typeof(TreeTopGroup))]
[KnownType(typeof(TreeGroup))]
[KnownType(typeof(TreeView))]
[KnownType(typeof(ITreeItem))]
public class CacheResponse
{
[DataMember]
public IDictionary<string, CacheItem> CacheItems { get; set; }
[DataMember]
public IEnumerable<KCSLuceneDocument> LuceneDocuments { get; set; }
}
该请求有效,所以我不会发布它。Response 仅包含一个 DateTime、一个 String 和一个 TreeItem 列表。TreeItem 类的重要部分
public class TreeItem : ITreeItem
{
public ITreeItem Parent { get; set; }
.
. more stuff
}
一旦父属性设置为 null 以外的值,客户端就会收到 System.ServiceModel.Dispatcher.NetDispatcherFaultException。
说明元素“ http://schemas.datacontract.org/2004/07/Core.Base:_x003C_Parent_x003E_k__BackingField ”包含类型为“http://schemas.datacontract.org/2004/07/Core”的数据。 Base:TreeItem \" 并且反序列化器不知道任何具有该名称的类型。
我尝试使用 KnownType 属性以及 ServiceKnownType 属性。两者都没有帮助。唯一有效的是将 Parent 的类型更改为 TreeItem ,我真的不想这样做。特别是因为它可以在其他一些位置包含 ITreeItems,这很可能也会破坏服务。
知道如何解决问题吗?