【发布时间】:2013-12-04 16:05:14
【问题描述】:
我有以下要序列化的 DataContracts:
[DataContract]
public class SwepubHeader
{
[DataMember(Name = "xsearch")]
public SwepubBody Body { get; set; }
}
[KnownType(typeof(SwepubSearchItem))]
[DataContract]
public class SwepubBody
{
[DataMember(Name = "from")]
public int From { get; set; }
[DataMember(Name = "to")]
public int To { get; set; }
[DataMember(Name = "records")]
public int Records { get; set; }
[DataMember(Name = "list")]
public SwepubSearchItem[] SearchItems { get; set; }
}
[DataContract]
public class SwepubSearchItem
{
[DataMember(Name = "isbn")]
public object ISBN { get; set; }
[DataMember(Name = "title")]
public object Title { get; set; }
[DataMember(Name = "description")]
public object Description { get; set; }
[DataMember(Name = "identifier")]
public object Identifier { get; set; }
[DataMember(Name = "type")]
public object Type { get; set; }
[DataMember(Name = "publisher")]
public object Publisher { get; set; }
[DataMember(Name = "date")]
public object Date { get; set; }
[DataMember(Name = "language")]
public object Language { get; set; }
[DataMember(Name = "relation")]
public object Relation { get; set; }
[DataMember(Name = "subject")]
public object Subjects { get; set; }
[DataMember(Name = "creator")]
public object Creators { get; set; }
}
当我尝试通过 WCF 返回时,我得到以下异常:
尝试序列化参数http://tempuri.org/:DoSwepubSearchAdvancedResult 时出错。 InnerException 消息是 'Type 'System.Object[]' 与数据协定名称 'ArrayOfanyType:http://schemas.microsoft.com/2003/10/Serialization/Arrays' 不是预期的。考虑使用 DataContractResolver 或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。有关详细信息,请参阅 InnerException。
我知道我可能需要对 KnownTypeAttribute 做一些事情,但我还没有真正掌握它应该如何工作。我尝试将 SwepubSearchItem 添加为 Swepub 正文的知识类型,但这没有用。值得注意的是,如果我注释掉 SwepubBody DataContract 的 SearchItems 属性,代码会起作用,但我不会得到响应中最重要的部分:)
这是一个正在序列化的 json 示例: http://libris.kb.se/xsearch?query=barn+design+subject:(utveckling)&format=json&format_level=full&database=swepub
【问题讨论】:
标签: c# asp.net wcf serialization datacontract