JSOn对象在wcf web服务端没有正确的反序列化怎么解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (7)

我正在开发iOS项目,并通过wcf webservice将Json字符串发送到后端,它为许多用户成功运行,但对于某些用户后端获取不完整的json字符串。

生成Json字符串的代码

NSData *data = [NSJSONSerialization dataWithJSONObject:EmployeeDetails options:0 error:nil];
    NSString *JsonString = [[NSString alloc] initWithData:data
                                                 encoding:NSUTF8StringEncoding];

并通过下面的代码附加请求的json字符串

[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];

EmployeeDetails是带有员工详细信息的NSMutableDictionary。

这里是从BackEnd反序列化成功的Json字符串

{"FirstName":"Donald","LastCBPaymentType":6,"AcceptEmail":true,"CellPhone":"321-300-6874","Position":"3","CarrierNum":"4","EmpNum":"96874"}

和不完整的Json字符串

{"FirstName":"roset","LastCBPaymentType":6,"AcceptEmail":true,"CellPhone":"321-300-6874","Position":"3","CarrierNum":"4","EmpNum":"98799

某些用户在后端出现不完整的json字符串。

任何人都可以帮助解决这个问题?

提问于
用户回答回答于

我最近在PHP / CodeIgniter中遇到了类似的问题,问题是JSON在到达我的处理程序之前,正在通过一些过于雄心勃勃的正则表达式“消毒”。也许有一些类似的WCF发生的消毒?

我会尝试的事情:

  1. 使用Charles Proxy确认请求(POST?)实际上是按照期望发送完整正文。
  2. 改为尝试Content-Type application / json。
用户回答回答于

那么,我会说TomSwift是在正确的轨道上.很明显,从字符串的末尾,被破坏的JSON只是简单地丢失了“这确实看起来像是被正则表达式清理过的东西.你真的应该找到问题的根源;但是当你弄明白这个问题时,你可以对你收到的JSON运行你自己的正则表达式,如果它不以“}结尾,只需添加它即可......首先做一些事情:'/“[0-9] + $ /'(检查最后是否有一个打开的数字字符串,如果有,则通过添加”“来关闭它),然后检查'/} $ / '(如果}是最后一个字符,如果不是:添加它)。

请记住,以上只是一个暂时的解决方案(因为它有点沉重,并不是很漂亮),但我可以想象自己被迫做这样的事情,仅仅是因为时间的限制。如果问题实际上来自API内部,可以告诉创作者关于它的内容,并在修复问题时使用上述修正。

如果有人确实选择使用类似上述的解决方法,请为所有持有圣洁的爱而欢迎,在代码中留下评论,解释为什么你这样做(而不是告诉我们你做了什么 ......) 。

扫码关注云+社区