使用ASP.NET webservice序列化问题?

时间:2013-01-01 10:53:23

标签: iphone asp.net objective-c web-services

我需要针对使用asp.net开发的Web服务/ API运行我的iPhone应用程序。

由于某种原因,我从API调用返回的响应在JSON的开头添加了额外的字符和“d”,如下所示。

{"d":"{\"count\":\"0\",\"status\":\"500\",\"recipes\":[]}"}

从我的基本阅读来看,这似乎是服务上的序列化问题。

  1. 我错了吗?
  2. 无论如何,我可以在iPhone客户端上将其解组为正确的JSON吗?
  3. 非常感谢帮助或指导。

1 个答案:

答案 0 :(得分:0)

整个思考是一个json,它包含一个对象“D”,其字符串也是json 所以这是json里面的一个json。

所以你有一个'外面的json':{“d”:“”} +内在的json:{“count”:“0”,“status”:“500”,“食谱”:[]}

如果我们刚刚插入没有\的内部json,我们可能得到无效的json ..在实践中(在这种情况下)我们不会,但我认为lib只是试图在安全的一面,所以它逃脱了内部的json和将其编码为字符串!

获取字符串并解析它可以正常工作,如下所示,并且一切都有效

id innerJSON = @"{\\\"count\\\":\\\"0\\\",\\\"status\\\":\\\"500\\\",\\\"recipes\\\":[]}";
id response = [NSString stringWithFormat:@"{\"d\":\"%@\"}", innerJSON];
id data = [response dataUsingEncoding:NSUTF8StringEncoding];
id outerJson = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSLog(@"%@", outerJson[@"d"]);

data = [outerJson[@"d"] dataUsingEncoding:NSUTF8StringEncoding];
id innerJson = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSLog(@"%@ %@", innerJson[@"count"],innerJson[@"status"]);