Java JSONObject不维护我放入的顺序。尝试发送到WCF服务

时间:2010-01-20 06:21:53

标签: java wcf json types

这是一个奇怪的问题。我理解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方面建议我如何解决这个问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

  

然而,它让我感到困惑,因为我希望我称之为put();应该保留我的订单的方法。也许这与我刚开始时所说的相矛盾。

是的。

  

但是在调用WCF服务时,密钥__type必须首先在服务上进行反序列化。

如果确实如此,那么(IMO)服务实现中的错误或者(如果反序列化机制是WCF的通用)是WCF中的错误。在前一种情况下,向服务实现者抱怨该服务是错误的。在后一种情况下,你可以尝试向微软抱怨破坏标准(又一次)...但你会浪费你的气息。

解决此问题的正确位置将在WCF端的代码中进行反序列化。但实际上,您可能需要切换到一个不同的Java JSON库,该库以一种使WCF满意的方式进行序列化。或者你可能只是破解你当前正在使用的JSON库......