【问题标题】:Nested DataContract serialization exception WCF嵌套 DataContract 序列化异常 WCF
【发布时间】: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


    【解决方案1】:

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

    但是,我会首先尝试序列化一个单个 SwepubSearchItem,以确保此类在其自身的序列化方面没有问题。

    【讨论】:

    • 我没有尝试过,但我现在尝试了,但没有帮助。关于它是否可能是 SwepubSearchItem 的一般序列化问题:如果是这种情况,那么我不应该能够在客户端代码中对其进行序列化。只有当我通过 wcf 返回它时才会出现问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    相关资源
    最近更新 更多