如何在WCF RESTful服务中以json格式返回IList?

时间:2011-02-07 12:56:50

标签: wcf json serialization ilist

是否可以在WCF 3.5服务中使用这样的方法签名(Offer是具有DataContractAttribute和DataMemberAttribute的自定义类):

[OperationContract]
[WebGet(UriTemplate = "GetOffers", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
IList<Offer> GetOffers();

因为如果我在Web浏览器中输入相应的URL,我会收到序列化错误(我认为这是因为IList没有Seri​​alizable属性,因此json序列化程序无法序列化它)。

解决方法是使用类似这样的方法签名:

[OperationContract]
[WebGet(UriTemplate = "GetOffers", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
List<Offer> GetOffers();

导致相同的序列化输出(一个简单的json数组),但是当第一个使用XML时,我想知道是否有办法让它在json中工作,保持相同的签名。

编辑:好吧它也不适用于XML序列化,所以行为似乎是正常的。问题仍然存在,是否可以保留此签名并更改序列化程序行为以使其工作?怎么样?

1 个答案:

答案 0 :(得分:1)

我相信您需要将您使用的硬集合类型添加到已知类型列表中。有关概念性说明,请参阅http://msdn.microsoft.com/en-us/library/ms730167.aspx,有关示例,请参阅http://msdn.microsoft.com/en-us/library/ms751512.aspx,有关编写得非常好的MSDN杂志文章,请参阅http://msdn.microsoft.com/en-us/magazine/gg598929.aspx

此外,请在此处查看前两个答案:How do you configure WCF known types programmatically?