这是一个奇怪的问题。我理解JSON应该是无序的,java.lang.JSONObject的实现特别提到它是无序的。
然而,它让我感到困惑,因为我希望我称之为put();应该保留我的订单的方法。也许这与我刚开始时所说的相矛盾。
我正在使用JSON与WCF Web服务进行通信,这需要我包含一个__type键来指定我发送的复杂对象的类型。
我劝你试试这个:
JSONObject object = new JSONObject();
try {
object.put("__type", "Value1");
object.put("SecondKey", "Value2");
object.put("ThirdKey", "Value3");
}
catch (JSONException e) {
e.printStackTrace();
}
日志中的输出是: { “ThirdKey”: “值3”, “__类型”: “值1”, “SecondKey”: “值2”}
现在,我了解实现使用HashMap,因此不维护订单。但是,当调用WCF服务时,密钥__type必须首先在服务上进行反序列化。我怎样才能做到这一点?有一段时间,我一直使用简单的字符串发送到webservice工作正常。然而,这是不可接受的,因为它很丑陋且难以维护。
请从Java方面或WCF方面建议我如何解决这个问题。
谢谢!
答案 0 :(得分:0)
然而,它让我感到困惑,因为我希望我称之为put();应该保留我的订单的方法。也许这与我刚开始时所说的相矛盾。
是的。
但是在调用WCF服务时,密钥__type必须首先在服务上进行反序列化。
如果确实如此,那么(IMO)服务实现中的错误或者(如果反序列化机制是WCF的通用)是WCF中的错误。在前一种情况下,向服务实现者抱怨该服务是错误的。在后一种情况下,你可以尝试向微软抱怨破坏标准(又一次)...但你会浪费你的气息。
解决此问题的正确位置将在WCF端的代码中进行反序列化。但实际上,您可能需要切换到一个不同的Java JSON库,该库以一种使WCF满意的方式进行序列化。或者你可能只是破解你当前正在使用的JSON库......