Создание JSON из C#: WebMessageBodyStyle.Wrapped или WebMessageBodyStyle.Bare?
Я пытаюсь написать приложение на C++, используя C++ REST SDK lib, которое будет обрабатывать данные JSON, созданные приложением C#. Программа A C# может создавать JSON в "обернутом" или "голом" стиле.
С помощью BodyStyle = WebMessageBodyStyle.Wrapped
C# создает JSON следующим образом:
{"Echo":"{\"firstname\":\"an'",\"number\":21,\"secondname\":\"pn\"}"}
С помощью BodyStyle = WebMessageBodyStyle.Bare
C# создает 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"));