Создание JSON из C #: WebMessageBodyStyle.Wrapped или WebMessageBodyStyle.Bare?

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

С помощью BodyStyle = WebMessageBodyStyle.WrappedC # создает JSON следующим образом:

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

С помощью BodyStyle = WebMessageBodyStyle.BareC # создает JSON следующим образом:

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

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

0

Решение

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

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

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

Поскольку я не работал в 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"));
1

Другие решения


По вопросам рекламы [email protected]