【问题标题】:serializing issue with ASP.NET webservice ?ASP.NET Web 服务的序列化问题?
【发布时间】:2013-01-01 10:53:23
【问题描述】:

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

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

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

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

  1. 我错了吗??
  2. 无论如何我可以在 iPhone 客户端上将其反序列化为正确的 JSON 吗?

我们将不胜感激帮助或指导。

【问题讨论】:

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


    【解决方案1】:

    整个想法是一个 json,其中包含一个对象“D”和一个字符串,它也是 json 所以是json里面的json。

    所以你有一个“外部 json”:{“d”:“”}
    + 一个内部 json:{"count":"0","status":"500","re​​cipes":[]}

    如果我们只是在没有 \ 的情况下插入内部 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"]);
    

    【讨论】:

    • 示例添加,\\ 仅用于在代码中写入字符串。实际字符串是您上面的 100%
    • 是的。我知道我可以按照上述方式浏览数据,但响应是否有效?我的意思是,为什么每个 " 之前都有一个 "d" 和 "\"
    • 因为答案是包含另一个 JSON 字符串的 JSON 字符串。 outerJSON == { "d" : "JSON_STRING" } 如果内部 JSON 没有被转义,它将是无效的,这样它就是 VALID :)
    • 生病编辑我的答案.. 认为这很清楚。生病尝试重新制定它
    • 好的。谢谢你现在的回答。但如果这是我项目的第一步,你会建议我在服务器上开票还是继续工作。恐怕当响应变得更加复杂时,我们可能会遇到更多问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    相关资源
    最近更新 更多