Java JSONObject не поддерживает порядок, в который я помещаю вещи. Попытка отправить в службу WCF - PullRequest
0 голосов
/ 20 января 2010

Это странная проблема.Я понимаю, что JSON должен быть неупорядоченным, и реализация java.lang.JSONObject специально упоминает, что он неупорядочен.

Однако, это озадачивает меня, потому что я ожидаю, как я вызову put ();Методы это должно держать мой порядок.Возможно, это противоречит тому, что я только что сказал в начале.

Я использую JSON для связи с веб-службой WCF, которая требует, чтобы я включил ключ __type для обозначения типа сложного объекта, который я отправляю.

Я призываю вас попробовать это:

    JSONObject object = new JSONObject();
    try {
     object.put("__type", "Value1");
     object.put("SecondKey", "Value2");
     object.put("ThirdKey", "Value3");
    }
    catch (JSONException e) {
     e.printStackTrace();
    }

Вывод в журнале: {"ThirdKey": "Value3", "__ type": "Value1", "SecondKey": "Value2"}

Теперь я понимаю, что реализация использует HashMap, поэтому порядок не поддерживается.Но при вызове службы WCF ключ __type ТРЕБУЕТСЯ быть первым, чтобы десериализация произошла в службе.Как мне этого добиться?Некоторое время я использовал простые строки для отправки на веб-сервис, который работает нормально.Тем не менее, это неприемлемо, так как это некрасиво и сложно поддерживать.

Пожалуйста, посоветуйте, как со стороны Java, так и со стороны WCF, как мне решить эту проблему.

Спасибо!

1 Ответ

0 голосов
/ 20 января 2010

Однако, это озадачивает меня, потому что я ожидал бы, как я вызову пут ();Методы это должно держать мой порядок.Может быть, это противоречит тому, что я только что сказал в начале.

Да, это так.

Но при вызове службы WCF ключ __type ОБЯЗАТЕЛЬНО должен быть первым длядесериализация в службе.

Если это действительно так, то (IMO) это либо ошибка в реализации сервиса, либо (если механизм десериализации является общим для WCF) в WCF.В первом случае пожаловайтесь разработчику сервиса, что сервис глючит.В последнем случае вы могли бы попытаться жаловаться в Microsoft на нарушение стандартов (но опять же) ... но вы бы зря потратили.

Правильное место, чтобы это исправить, было бы в коде на WCFсторона, которая делает десериализацию.Но на практике вам может потребоваться переключиться на другую библиотеку Java JSON, которая сериализуется таким образом, чтобы сделать WCF счастливым.Или, может быть, вы могли бы просто взломать библиотеку JSON, которую вы сейчас используете ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...