WCF Web API 0.6 - HttpResponseMessage中的返回列表<t>会引发异常</t>

时间:2012-02-06 18:42:44

标签: wcf-web-api

我是WCF Web API的新手,我有一个基本服务,并尝试充分利用 HttpResponseMessage 作为返回类型。我试图返回一个List并得到以下错误,我无法绕过它。

这是一个非常基本的直接XML服务。

任何想法都将不胜感激。感谢。

  

类型   'System.Net.Http.HttpResponseMessage`1 [System.Collections.Generic.List`1 [Entities.UploadedDocumentSegmentType]]'   无法序列化。考虑用它标记它   DataContractAttribute属性,并标记其所有成员   想要使用DataMemberAttribute属性进行序列化。如果是这种类型   是一个集合,考虑用它来标记它   CollectionDataContractAttribute。请参阅Microsoft .NET Framework   其他支持类型的文档。

这是我的服务:

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class DocumentService
{
    [WebGet(UriTemplate = "/GetAllUploadableDocumentTypes")]
    public HttpResponseMessage<List<UploadedDocumentSegmentType>> GetAllUploadableDocumentTypes()
    {
       UploadedDocumentManager udm = new UploadedDocumentManager();
       return new HttpResponseMessage<List<UploadedDocumentSegmentType>>(udm.GetAllUploadableDocumentTypes());                                        
    }
}

类UploadedDocumentSegmentType定义如下:

[Serializable]
public class UploadedDocumentSegmentType
{
    public UploadedDocumentSegmentType();

    public int DocTracSchemaID { get; set; }
    public int ID { get; set; }
    public string Type { get; set; }
}

我也尝试了这个:

[Serializable]
[DataContract]
public class UploadedDocumentSegmentType
{
    public UploadedDocumentSegmentType();

    [DataMember]
    public int DocTracSchemaID { get; set; }
    [DataMember]
    public int ID { get; set; }
    [DataMember]
    public string Type { get; set; }
}

UDPATE:我使用WCF REST服务应用程序Visual Studio模板来创建服务。我从头开始尝试将示例WebGET方法的返回类型更改为WebResponseMessage,它会在那里抛出相同的错误。所以这不是我的代码,它是一些配置的东西,对于我的生活我无法弄清楚..

1 个答案:

答案 0 :(得分:0)

为什么需要返回List&lt; T&gt;?只需返回一个数组,它应该没问题。我不认为内置的JSON-Serializer知道如何处理List&lt; T&gt;。一个合理的事情是不知道如何做List&lt; T&gt;通过添加/删除类型调用来“编辑”。

此外,您不需要使用wcf-web-api的datacontract / member属性。