无法通过WCF发送复杂对象

时间:2012-10-11 09:27:58

标签: wcf

我有一个ServiceContract:

    bool CreateSlideshow(Slideshow current, string path, string name);

当我运行调用该服务的程序时,我得到以下异常:

  

尝试序列化参数时出错   http://tempura.org/:current。 InnerException消息是'Type   带有数据契约的'System.DelegateSerializationHolder + DelegateEntry'   名称   'DelegateSerializationHolder.DelegateEntry:HTTP://schemas.datacontract.org/2004/07/System'   不是预期的。考虑使用DataContractResolver或添加任何   已知类型列表中静态未知的类型.....

显然问题在于Slideshow。我的班级Slideshow有以下成员:

    private String name;
    private String path;
    private List<Slide> slides;

并且班级Slide具有以下成员:

    private String title;
    private ContentTypeEnum contentType;
    private String textContent;
    private String pictureContextPath;

其中ContentTypeEnum是枚举。

知道如何解决这个异常吗?希望得到一些建议/意见。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您使用的类型必须使用[DataContract]属性进行标记。必须使用[DataMember]属性标记属性。

此外,您的字段应该是公共属性,因为对于私有字段,数据提取没有任何意义。

[DataContract]
public class Slideshow
{
    [DataMember]
    public String Name { get; set; }
    [DataMember]
    public String Path { get; set; }
    [DataMember]
    public List<Slide> Slides { get; set; }
}

[DataContract]
public class Slide
{
    [DataMember]
    public String Title { get; set; }
    [DataMember]
    public ContentTypeEnum ContentType { get; set; }
    [DataMember]
    public String TextContent { get; set; }
    [DataMember]
    public String PictureContextPath { get; set; }
}