Json字符串变化



我有一个。net WCF Rest服务返回Json被Android应用程序使用。

在调试中,WCF服务正确地将返回值(Json)设置为:

{"BaseLoyaltyPoints":1480,"BonusLoyaltyPoints":0,"BrandId":1414, [etc...] }

同样在调试中,当它返回到记事本时,返回值已更改为:

{"BaseLoyaltyPoints":1480,"BonusLoyaltyPoints":0,"BrandId":1414, [etc...] }

当它进入我的Android应用程序时,它变成了:

{\"BaseLoyaltyPoints\":1480,\"BonusLoyaltyPoints\":0,\"BrandId\":1414, [etc...] }

这是我用来序列化Json的样板代码:

Dim stream1 As MemoryStream = New MemoryStream
Dim ser As DataContractJsonSerializer = New DataContractJsonSerializer(GetType(FullProduct))
ser.WriteObject(stream1, Me)
Dim _json As String = Encoding.UTF8.GetString(stream1.ToArray())
stream1.Close()
获取Json的Android代码是:
HttpClient httpclient = new DefaultHttpClient();
HttpGet request = new HttpGet(getString(R.string.CONST_RestService) + "/json/Product/" + productID);
ResponseHandler<String> handler = new BasicResponseHandler();       
result = httpclient.execute(request, handler);  
jObject = new JSONObject(result);

怎么回事?

感谢戴夫

JSON数据需要是一个可求值的JavaScript字符串-"字符需要转义为"(字符"相对于字符串限制器"),并且该表达式中的也需要转义(因为也是一个特殊字符)。所以它一直都是那个字符串,只是每次打印的都不一样。

以以下JavaScript为例:

object = JSON.parse("{"hello":"World"}");
alert(object.hello);

下面更多的是猜测,而不是实际的知识,因为我不知道你使用的类究竟是如何表现的,但我认为它是正确的。

可以看到,"字符需要转义为",所以. net JSON序列化器就是这样做的。一切都很好,将其解释为JS将如预期的那样工作。

现在可能是正在进行的是你的JSONObject构造函数不期望字符串已经被正确转义,所以它自己做。澄清一下:当你说"有一个转义字符"时,你的意思可能是这样的:

String workingJSONString = "{"Hello":"World"}"

对吧?这里的问题是,Java与JavaScript有相同的转义规则-这不是你从HTTPRequest得到的,你得到的是

String youGotThis = "{\"Hello\":\"World\"}"

因为字符串中有文字反斜杠,这些也需要转义。我很确定这就是正在发生的事情,你可能不得不告诉你的。net JSON序列化器不要应用转义规则,或者找到一些从正确转义的JSON字符串构造JSONObject的东西,或者自己删除不必要的转义。

我希望这对你有帮助-但是,我也不完全确定,所以你应该检查一下它是否真的像我说的那样运行。

相关内容

最新更新