Какова простейшая функция С# для синтаксического анализа строки JSON в объект и отображения ее (С# XAML WPF)? (например, объект с 2 массивами - arrA и arrB)
Какова самая простая функция С# для синтаксического анализа строки JSON в объект?
Ответ 1
DataContractJsonSerializer serializer =
new DataContractJsonSerializer(typeof(YourObjectType));
YourObjectType yourObject = (YourObjectType)serializer.ReadObject(jsonStream);
Вы также можете использовать JavaScriptSerializer
, но DataContractJsonSerializer
предположительно лучше справляется с сложными типами.
Как ни странно, JavaScriptSerializer когда-то устарел (в 3.5), а затем воскрешен из-за ASP.NET MVC (в 3.5 SP1). Этого было бы достаточно, чтобы поколебать доверие и привести меня к использованию DataContractJsonSerializer
, так как он сильно испечен для WCF.
Ответ 2
Просто используйте библиотеку Json.NET. Это позволяет легко анализировать строки формата Json:
JObject o = JObject.Parse(@"
{
""something"":""value"",
""jagged"":
{
""someother"":""value2""
}
}");
string something = (string)o["something"];
Документация: Разбор JSON-объекта с использованием JObject.Parse
Ответ 3
Я думаю, что это то, что вы хотите:
JavaScriptSerializer JSS = new JavaScriptSerializer();
T obj = JSS.Deserialize<T>(String);
Ответ 4
Вы должны создать структуру, представляющую ключи JSON (в случае, если вы точно это знаете), а затем вы можете легко десериализовать строку JSON в своей структуре. На моем примере я отменил дескрипцию ответа с сервера Google Cloud Message:
class templateResponse
{
public String multicast_id;
public String success;
public String failure;
public String canonical_ids;
public Result[] results;
public class Result
{
public String message_id;
public String registration_id;
public String error;
};
}
входящий JSON был:
"\"multicast_id\":7400896764380883211,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1351777805148960%39895cf0f9fd7ecd\"}]}"
Итак, используйте
templateResponse result = new JavaScriptSerializer().Deserialize<templateResponse>(json);
и вы получите десериализованный result
объект
Ответ 5
Я бы воспользовался библиотекой Json.NET, которая может преобразовать ответ JSON в XML-документ. С помощью XML-документа вы можете легко запросить XPath и извлечь нужные данные. Мне это очень полезно.