在我的情况WCF RESTful服务,我有如下一个Web服务,不接受JSON输入
[OperationContract]
[WebInvoke(UriTemplate = "services/CreatePerson", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, Method = "POST")]
string CreatePerson(string data);
它期待一个JSON输入。虽然我通过传递一个JSON字符串作为请求的身体下面,
"{"personName":"Joe", "source":"I", "address":"KK Road"}"
测试使用Fiddler此服务,并请求头作为
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”} – Jomit
“{'personName':'102','source':'I','地址':'KK Road'}“输入正在工作,但是在消费者和服务端管理这个输入相当无礼,因为android和iphone应用程序所使用的服务应该通过将双引号替换为单引号来重写代码(如获取json字符串时,使用双引号将他们的类序列化为json)以及我需要将其替换为双引号以反序列化到相应类的服务。 –
好的。那么为什么你需要在一个参数中传递数据呢?我的意思是对于上面的例子,你可以用3个参数创建服务方法。然后从iPhone或Android客户端,您可以创建一个常规对象,将其序列化为JSON并将其传递给服务。只要对象具有相同的参数名称,WCF就会适当地映射它。 – Jomit