我是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,它会在那里抛出相同的错误。所以这不是我的代码,它是一些配置的东西,对于我的生活我无法弄清楚..
答案 0 :(得分:0)
为什么需要返回List&lt; T&gt;?只需返回一个数组,它应该没问题。我不认为内置的JSON-Serializer知道如何处理List&lt; T&gt;。一个合理的事情是不知道如何做List&lt; T&gt;通过添加/删除类型调用来“编辑”。
此外,您不需要使用wcf-web-api的datacontract / member属性。