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

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

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

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

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

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

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

1 ответ

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

Если у вас есть контроль над приложением C#, закодируйте его, чтобы использовать только Bare. В общем, я не вижу преимущества в стиле Wrapped. Возможно, он разработан специально для некоторых других клиентских библиотек 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"));
Другие вопросы по тегам