#json #gson
#json #gson
Вопрос:
У меня есть служба .NET, которая возвращает экранированную строку JSON
[
"{"uid":3298534883331,"id":"foo","name":"Foo Bar","address":{"uid":3298534883332,"city":"Shanghai","street":"Ke Yuan Street"}}",
"{"uid":3298534883333,"id":"foo","name":"Foo Bar","address":{"uid":3298534883334,"city":"Shanghai","street":"Ke Yuan Street"}}"
]
Со стороны Java я использую GSON, и он хочет иметь неэкранированный JSON
[
{"uid":0,"id":"foo","name":"Foo Bar","address":{"uid":0,"city":"Shanghai","street":"Ke Yuan Street"}},
{"uid":0,"id":"foo","name":"Foo Bar","address":{"uid":0,"city":"Shanghai","street":"Ke Yuan Street"}}
]
Существует ли какая-либо стандартная процедура для отмены экранирования строки JSON?
Вот часть .NET
[OperationContract]
[WebGet(
UriTemplate = "{Database}/{ContainerName}?query={tag}",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
string[] Get(string database, string containerName, string tag);
Внутри он использует JSON.net
Java-клиент
String json = webResource.
queryParam("query", "id = 'foo' AND name = 'Foo Bar'").
get(String.class);
Из отладчика Eclipse я вижу различия в двух строках: что генерирует GSON и что возвращается
Вы можете отметить дополнительный » для каждого объекта в начале и в конце
Комментарии:
1. Как вы показываете строку? Это действительно экранировано, или это просто то, что вы получаете от отладчика? Как вы возвращаете строку из своего. СЕТЕВОЕ приложение?
2. Обновлено сообщение с подробными сведениями о режиме
Ответ №1:
Кажется, что ваш сервер фактически возвращает массив строк:
string[] Get(string database, string containerName, string tag);
и это именно то, что получает клиент:
[
"string 1",
"string 2",
...
"string N"
]
Вы должны вернуть массив объектов:
MyClass[] Get(string database, string containerName, string tag);
и тогда вы получите что-то вроде:
[
{"MyProperty1": "value1_1", ..., "MyPropertyM": "value1_M"},
{"MyProperty1": "value2_1", ..., "MyPropertyM": "value2_M"},
...
{"MyProperty1": "valueN_1", ..., "MyPropertyM": "valueN_M"},
]
Будучи MyClass определен следующим образом:
class MyClass
{
public string MyProperty1 { get; set; }
public string MyProperty2 { get; set; }
...
public string MyPropertyM { get; set; }
}