【发布时间】:2013-01-24 04:55:35
【问题描述】:
就我而言,我有一个如下的网络服务,
[OperationContract]
[WebInvoke(UriTemplate = "services/CreatePerson", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, Method = "POST")]
string CreatePerson(string data);
它需要一个 JSON 输入。当我通过将 JSON 字符串作为请求正文传递如下的 Fiddler 来测试此服务时,
"{"personName":"Joe", "source":"I", "address":"KK Road"}"
请求标头为
User-Agent: Fiddler
Content-Type: application/json;charset=utf-8
Host: localhost
Content-Length: 54
调试时没有碰到服务方法断点。
同时它适用于以下JSON(将双引号替换为前一个json的单引号),
"{'personName':'102', 'source':'I', 'address':'KK Road'}"
服务方法不接受 JSON 字符串输入,因为如果我将输入作为“测试”传递它会很好..
实际问题在哪里,请帮我找出来....
【问题讨论】:
-
那么双引号改成单引号后有什么问题呢?如果您传入这样的对象,您也可以将 json 对象直接映射到您的方法参数:{ "data" : "somevalue"}
-
"{'personName':'102', 'source':'I', 'address':'KK Road'}" 输入工作正常,但在消费者处管理此输入却很容易听到和服务方面,因为android和iphone应用程序使用的服务应该通过将双引号替换为单引号来重写代码(作为在将其类序列化为json时使用双引号获取json字符串)并且在服务上我需要替换它用双引号反序列化到相应的类..
-
好的。那么是否有特定原因需要在单个参数中传递数据?我的意思是对于上面的示例,您可以使用 3 个参数创建服务方法。然后从 iphone 或 android 客户端,您可以创建一个常规对象,将其序列化为 JSON 并将其传递给服务。只要对象具有相同的参数名称,WCF 就会适当地映射它。