在Silverlight上使用JSON WCF

时间:2013-02-22 17:52:46

标签: json wcf silverlight

我想尝试更改SOAP WCF以接受请求并以JSON格式返回结果,以使数据流量不那么笨重。

我看到JSON请求函数如下所示:

  

wcfClient.OpenReadAsync(http://yourUrl.com/wcf/service1.svc/GetEmployees

并执行常规SOAP请求函数,如下所示:

  

wcfClient.GetEmployeesAsync();

1)对于JSON结果,您是否需要将它们解析为对象,还是自动解析为SOAP?

2)有没有办法在不做太多工作的情况下做到这一点,例如将项目中的每个WCF调用更改为“JSON-ish”?

2 个答案:

答案 0 :(得分:2)

为了补充Davut的答案--WCF确实支持构建RESTful服务,尽管我同意ASP.NET Web API框架通常比WCF更容易使用。 JSON.NET是一个很棒的库,它具有很好的反序列化功能(例如,它可以轻松地使用表示Employee对象列表的JSON并将它们转换为实际的List<Employee>实例)

但是为了完整起见,如果您想使用“普通”WCF客户端来访问返回JSON的基于WCF的服务,您可以这样做。这不是太简单,但你可以通过使用新的编码器和执行转换的行为来做到这一点。 http://blogs.msdn.com/b/carlosfigueira/archive/2010/04/29/consuming-rest-json-services-in-silverlight-4.aspx上的帖子更多地讨论了它,并且有一个指向代码示例的指针。

简而言之,可以在Silverlight中使用WCF客户端来使用JSON,但由于其复杂性通常没有完成,而Davut的选项(使用WebClient等HTTP客户端下载JSON,然后使用JSON等库)。 NET将其解析为对象)是首选。

答案 1 :(得分:1)

首先,这个想法“使数据流量不那么笨重”。很好。

特别是对于移动设备。除此之外,不要认为WCF xml会导致PC出现网络问题。 XM是最可压缩的格式之一。通过WCF二进制文件,它将被压缩。

对于“如果没有做太多工作,有没有办法做到这一点?”

是的,RESTFul服务(Restless Services)上有一个名称。现在,微软直接通过WEBApi支持它。

您也可以使用ODATA进行过滤,订购操作

以下是一些链接,

http://msdn.microsoft.com/en-us/library/system.servicemodel.web.webgetattribute.aspx

http://blogs.msdn.com/b/rjacobs/archive/2010/06/14/how-to-do-api-key-verification-for-rest-services-in-net-4.aspx

ODATA http://www.odata.org/documentation/uri-conventions#FilterSystemQueryOption

一些练习笔记,一些限制:

从EntityObject派生的EntityFrameWork实体具有IsReferenceType属性,不允许您进行JSON序列化。 (我使用自动映射器生成POCO对象并映射它们并序列化json)

WEBAPI支持你很多想法,比如WebGet,WebInvoke GetXML Give JSON,ODATA功能(只选择和格式不允许。)

注意:在您的Web请求标题中,您应该接受text / json来获取真正的json。

“对于JSON结果,您是否需要将它们解析为对象或......”

我可以说你应该尝试JSON.NET它的便携式图书馆无处不在。使用泛型函数反序列化时,它会返回您期望的集合。

希望它有所帮助。虽然发现这些stackoverflow帮助我成为一名助手。