2015-08-19 2 views
0

Я пытаюсь написать приложение C++, используя C++ REST SDK lib, который будет обрабатывать данные JSON, созданные приложением C#. Программа C# может создавать JSON в «обернутом» или «голом» стиле.Создание JSON из C#: WebMessageBodyStyle.Wrapped или WebMessageBodyStyle.Bare?

Использование BodyStyle = WebMessageBodyStyle.Wrapped, C# производит JSON как следующий:

{"Echo":"{\"firstname\":\"an'",\"number\":21,\"secondname\":\"pn\"}"} 

Использование BodyStyle = WebMessageBodyStyle.Bare, C# производит JSON как это:

"{\"firstname\":\"an'",\"number\":21,\"secondname\":\"pn\"}" 

Как моя программа распознать, какой тип был произведен: обернутый или Bare?

+1

Что вы имеете в виду с помощью 'wrapped' и' not wrapped' json? Можете ли вы привести пример того и другого? – Jacobian

+1

Простой, обернутый json будет чувствовать себя немного резиновым. –

+0

@Jacobian Я редактировал вопрос. Спасибо за ваше замечание. –

ответ

1

JSON - это стандартный формат представления и обмена данными. Он не определяет термины Упакованные или Bare. Я не знаком с C# и его библиотеками для кодирования данных как JSON, однако я могу сделать предположение на основе предоставленных вами образцов.

Если у вас есть контроль над приложением C#, используйте его для использования Bare. Я не вижу никакого преимущества, в общем, для Обернутый стиль. Возможно, он разработан специально для некоторых других клиентских библиотек C#.

Единственная разница, которую я вижу в выпуске, - это структура данных. Нет никакого способа быть абсолютно уверенным, но из этих двух образцов вы можете просто посмотреть на десериализованный объект и проверить, есть ли у него атрибут Echo. Если это так, используйте значение этого атрибута, и если он не использует объект as-is.

Поскольку я не работал на C++ более десяти лет, и я не знаю, какую библиотеку JSON вы используете, я приведу пример в JavaScript (хотя с использованием стиля, который может быть несколько ближе к C++). Вот как эти два объекта могут быть обработаны:

var data = JSON.parse(...); // the '...' represents where ever you get the text 
if (data["Echo"] !== undefined) 
    { data = data["Echo"]; } 
console.log("The first name is:", data["firstname"]); 

Вот псевдо-код примера, который почти действительный Java, которые могут быть более легко распознать и переведенный на C++:

Map<String, Object> data = JSON.parse(...); // the '...' represents where ever you get the text 
if (data.containsKey("Echo")) 
    { data = (Map)data.get("Echo"); } 
System.out.println("The first name is: " + data.get("firstname"));