首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CommunicationException:在尝试序列化参数时出错

CommunicationException:在尝试序列化参数时出错
EN

Stack Overflow用户
提问于 2011-07-29 12:02:00
回答 1查看 2.2K关注 0票数 3

我有一个webservice,它的方法是将抽象基类型的参数Specification<TDomainModel>作为参数。我意识到,WCF不知道如何在不指定已知类型的情况下反/序列化它。但是,当我试图指定它们时,我仍然会得到这样的例外:

在试图序列化参数http://myproject.org:specification时出错。这个'MyProject.DomainModel.WebSnapshot.WebSnapshotSpecification‘消息是'Type InnerException,其数据契约名为'WebSnapshotSpecification:http://schemas.datacontract.org/2004/07/MyProject.DomainModel.WebSnapshot’,这是不需要的。向已知类型列表中添加任何静态不知道的类型--例如,使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。

如果有人能看到我漏掉了什么东西,我们会非常感激的:)课程如下:

WebSnapshotRepositoryService

代码语言:javascript
复制
[ServiceContract(Namespace = "http://myproject.org")]
[ServiceKnownType(typeof(Specification<WebSnapshot>))]
[ServiceKnownType(typeof(WebSnapshotSpecification))]
public class WebSnapshotRepositoryService
{
    [OperationContract]
    public IEnumerable<WebSnapshot> Get(Specification<WebSnapshot> specification)
    {
        // Code here.
    }
}

WebSnapshotSpecification

代码语言:javascript
复制
public class WebSnapshotSpecification : Specification<WebSnapshot>
{
    public override Expression<Func<WebSnapshot, bool>> IsSatisfiedByExpression()
    {
        return (t) => true;
    }
}

它是WebSnapshot的规范。

代码语言:javascript
复制
[DataContract(IsReference = true, Name = "WebSnapshot", Namespace = "MyProject.DomainModel.WebSnapshot")]
public class WebSnapshot
{
    [DataMember(Order = 1)]
    public virtual string Name { get; set; }
    [DataMember(Order = 2)]
    public virtual string PictureFilePath { get; set; }
    [DataMember(Order = 3)]
    public virtual int PictureHeight { get; set; }
    [DataMember(Order = 4)]
    public virtual int PictureWidth { get; set; }
}

最后,这里是Specification<TDomainModel>

代码语言:javascript
复制
public abstract class Specification<TDomainModel>
{
    public virtual bool IsSatisfiedBy(TDomainModel domainObject)
    {
        return IsSatisfiedByExpression().Compile().Invoke(domainObject);
    }

    public virtual TDomainModel AssembleObject()
    {
        return Activator.CreateInstance<TDomainModel>();
    }

    public abstract Expression<Func<TDomainModel, bool>> IsSatisfiedByExpression();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-29 12:38:39

您似乎试图向服务发送一个WebSnapshotSpecification类实例,并期望WCF序列化/反序列化它包含的IsSatisfiedByExpression 方法。WCF不支持这种情况。如果WebSnapshotSpecification类具有一些属性,那么这些属性将被序列化/反序列化,但是方法从来不是WCF隐式或显式DataContract定义的一部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6872783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档