我有以下想要序列化的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
1 回答
您是否尝试使用
[KnownType(typeof(SwepubSearchItem[]))]
(即一个SwepubSearchItem数组)来装饰您的SwepubBody
类?但是,我首先尝试序列化单个
SwepubSearchItem
,以确保此类没有关于其自身序列化的问题 .