JSOn 对象在 wcf Web 服务端未正确反序列化
本文关键字:反序列化 服务 对象 wcf Web JSOn | 更新日期: 2023-09-27 18:37:23
我正在研究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。
和
这是从后端反序列化的成功 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 字符串。
任何人都可以帮助解决这个问题?
好吧,我会说TomSwift走在正确的轨道上......很明显,损坏的 JSON 只是缺少字符串末尾的"}"。这确实看起来像是被正则表达式消毒的东西......你真的应该找到问题的根源;但是为了在你弄清楚的时候快速而肮脏的修复,你可以在你收到的 JSON 上运行你自己的正则表达式,如果它没有以"}"结尾,只需添加它......首先做类似的事情:"/"[0-9]+$/'(要检查末尾是否有一个开放的数字字符串,如果有,则通过添加" 来关闭它)然后检查 '/}$/' (如果 } 是最后一个字符,如果不是:添加它)。
请记住,以上只是一个临时修复(因为它有点重,也不是那么漂亮),但我可以想象自己被迫做这样的事情,仅仅是因为时间限制。如果问题实际上来自 API 内部,您可以告诉创建者,并在他们修复它时使用上面类似修复的内容。
附言。如果有人确实选择使用上述修复程序,为了对您神圣的一切的热爱,请在代码中留下评论,解释您为什么这样做(而不是告诉我们您做了什么......
我最近在 PHP/CodeIgniter 中遇到了类似的问题,问题是 JSON 在到达我的处理程序之前通过一些过于雄心勃勃的正则表达式被"清理"。 也许在 WCF 中发生了一些类似的清理?
我会尝试的事情:
-
使用 Charles Proxy 确认请求 (POST?) 实际上正在按预期发送整个正文。
-
请改用内容类型应用程序/json。