WCF Web服务端无法正确反序列化JSON对象

16

我正在进行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字符串。

有人能帮助解决这个问题吗?


你在这里得到的结果是什么 EmployeeDetails - Anbu.Karthik
这句话的意思是你已经从服务器得到了响应,但是格式不规范,对吗? - Anbu.Karthik
@Anbu.Karthik:不,我们从iOS应用程序向服务器发送数据,但服务器收到了不完整的JSON数据(在服务器端)。 - Sivaprasad Km
你确定它发生在网络流量中吗? - Anbu.Karthik
让我们在聊天中继续这个讨论 - Sivaprasad Km
显示剩余4条评论
2个回答

1

好的,我认为TomSwift是正确的方向... 很明显,这个损坏的JSON字符串只是缺少了"}"。这确实看起来像是被正则表达式过滤掉的内容... 你真的应该找到问题的源头;但是在你弄清楚之前,你可以对收到的JSON运行自己的正则表达式,如果它没有以 "}" 结尾,就添加它... 首先做一些像这样的事情: '/"[0-9]+$/'(检查是否有一个开放的数字字符串在末尾,如果有,通过添加 " 来关闭它),然后检查 '/}$/'(如果}是最后一个字符,如果不是:添加它)。

请记住,以上只是一个临时修复方法(因为它有点繁重且不太美观),但我可以想象自己被迫做出这样的事情,仅仅是因为时间限制。如果问题实际上来自API内部,你可以告诉创建者,并在他们解决问题时使用类似于上面的修复方法。

附注:如果有人选择使用上述修复程序,请请请,为了您所信仰的一切神圣,留下一条代码注释解释为什么这样做(而不是告诉我们做了什么...)。


0

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

我会尝试以下几点:

  1. 使用Charles Proxy确认请求(POST?)是否按照您的期望发送完整的主体。

  2. 尝试使用Content-Type应用程序/JSON。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接