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 字符串。

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

JSOn 对象在 wcf Web 服务端未正确反序列化

好吧,我会说TomSwift走在正确的轨道上......很明显,损坏的 JSON 只是缺少字符串末尾的"}"。这确实看起来像是被正则表达式消毒的东西......你真的应该找到问题的根源;但是为了在你弄清楚的时候快速而肮脏的修复,你可以在你收到的 JSON 上运行你自己的正则表达式,如果它没有以"}"结尾,只需添加它......首先做类似的事情:"/"[0-9]+$/'(要检查末尾是否有一个开放的数字字符串,如果有,则通过添加" 来关闭它)然后检查 '/}$/' (如果 } 是最后一个字符,如果不是:添加它)。

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

附言。如果有人确实选择使用上述修复程序,为了对您神圣的一切的热爱,请在代码中留下评论,解释您为什么这样做(而不是告诉我们您做了什么......

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

我会尝试的事情:

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

  2. 请改用内容类型应用程序/json。