JSOn对象没有在wcf webservice端正确反序列化

时间:2016-03-04 06:20:18

标签: c# ios json web-services wcf

我正在开发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字符串。

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

2 个答案:

答案 0 :(得分:1)

好吧,我会说TomSwift在正确的轨道上......很明显,破坏的JSON只是从字符串的末尾缺少“}。这确实看起来像是被一个人消毒了正则表达式... 你真的应该找到问题的根源;但是对于快速而肮脏的修复,当你想出来时,你可以在你收到的JSON上运行自己的正则表达式,如果它不以“}结束,只需添加它......首先执行以下操作:'/“[0-9] + $ /'(检查末尾是否有打开的数字字符串,如果有,则通过添加”关闭它)然后检查是否'/} $ / '(if}是最后一个char,如果不是:添加它。

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

PS。如果有人确实选择使用上述修复程序,请为了您所有人的爱而请,请在代码中留下评论为什么要这样做(而不是告诉我们你做了什么 ......)。

答案 1 :(得分:0)

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

我会尝试的事情:

  1. 使用Charles Proxy确认请求(POST?)实际上是按预期发送完整正文。

  2. 请尝试使用Content-Type application / json。