首页 文章

嵌套DataContract序列化异常WCF

提问于
浏览
2

我有以下想要序列化的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 回答

  • 0

    您是否尝试使用 [KnownType(typeof(SwepubSearchItem[]))] (即一个SwepubSearchItem数组)来装饰您的 SwepubBody 类?

    但是,我首先尝试序列化单个 SwepubSearchItem ,以确保此类没有关于其自身序列化的问题 .

相关问题