WCF不会序列化我的类,但DataContractSerializer在不使用WCF时似乎很满意



我有一个带有属性的简单对象(我有更多的属性,简单的int和字符串);

    [DataMember]
    public virtual IList<MailAddress> DistributionList { get; set; }

我使用NHibernate读取了这个对象,导致属性类型为NHibernat。收集通用的持久通用列表。

在查看WCF日志时,我得到以下错误;

尝试序列化参数时出错http://tempuri.org/:StartReportDistributionResult.InnerException消息为

键入"Miros"。模型。MailAddress',数据协定名称为'MailAddress:http://schemas.datacontract.org/2004/07/Miros.Models不应为"。如果您正在使用DataContractSerializer或将任何未知类型静态添加到已知类型列表中,请考虑使用DataContractResolver,例如,通过使用KnownTypeAttribute属性或将它们添加到传递给序列化程序的已知类型列表。'。有关详细信息,请参阅InnerException。

现在,这应该表明序列化有问题。因此,我添加了通过DataContractSerializer测试对象的代码,从这个问题开始,有人创建了DataContract测试工具吗?。这很好。。。

现在,如果我更改属性;

myObject.DistributionList = myObject.DistributionList.ToList();

WCF很高兴。这是怎么回事?我怎样才能知道问题出在哪里。

这可能是由于DataMember的类型为IList。请尝试将其更改为具体类List。

我发现在WCF协定中使用通用接口类型数据成员有点问题,特别是如果接口成员未正确初始化或延迟加载,我记得使用IEnumerable类型数据成员进行WCF序列化时也遇到过类似的序列化问题。

相关内容

  • 没有找到相关文章

最新更新