JSON (JavaScript Object Notation) — это лёгкий формат обмена данными, часто используемый в веб-приложениях. C# предоставляет несколько способов эффективного анализа данных JSON, упрощая интеграцию с веб-API и другими системами на основе JSON. В этой статье рассматриваются три популярных метода, с выделением их сильных и слабых сторон.
Содержание
- Разбор JSON с помощью JsonConvert.DeserializeObject()
- Динамический разбор JSON с помощью JObject.Parse()
- Использование JavaScriptSerializer().Deserialize()
Разбор JSON с помощью JsonConvert.DeserializeObject()
Библиотека Newtonsoft.Json
— широко используемая и высокопроизводительная библиотека JSON для .NET. Она предлагает метод JsonConvert.DeserializeObject()
для эффективного разбора JSON. Вам потребуется установить её через NuGet Package Manager («Newtonsoft.Json»).
using Newtonsoft.Json;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
}
public class Example
{
public static void Main(string[] args)
{
string jsonString = @"{
""Name"": ""John Doe"",
""Age"": 30,
""City"": ""New York""
}";
Person person = JsonConvert.DeserializeObject<Person>(jsonString);
Console.WriteLine($"Name: {person.Name}");
Console.WriteLine($"Age: {person.Age}");
Console.WriteLine($"City: {person.City}");
}
}
Этот код определяет класс Person
, соответствующий структуре JSON. JsonConvert.DeserializeObject<Person>(jsonString)
десериализует JSON в объект Person
, обеспечивая лёгкий доступ к его свойствам. Это, как правило, наиболее эффективный и функционально богатый подход.
Динамический разбор JSON с помощью JObject.Parse()
Также используя Newtonsoft.Json
, метод JObject.Parse()
обеспечивает динамический разбор. Это полезно, когда структура JSON неизвестна или требуется гибкий доступ к свойствам.
using Newtonsoft.Json.Linq;
public class Example
{
public static void Main(string[] args)
{
string jsonString = @"{
""Name"": ""Jane Doe"",
""Age"": 25,
""City"": ""London"",
""Address"": {
""Street"": ""123 Main St"",
""Zip"": ""10001""
}
}";
JObject jObject = JObject.Parse(jsonString);
string name = (string)jObject["Name"];
int age = (int)jObject["Age"];
string city = (string)jObject["City"];
string street = (string)jObject["Address"]["Street"];
Console.WriteLine($"Name: {name}");
Console.WriteLine($"Age: {age}");
Console.WriteLine($"City: {city}");
Console.WriteLine($"Street: {street}");
}
}
JObject.Parse()
создаёт JObject
. Доступ к свойствам осуществляется с помощью индексаторов, что позволяет получать доступ к вложенным объектам. Приведение типов имеет решающее значение для правильного извлечения значений.
Использование JavaScriptSerializer().Deserialize()
Встроенный JavaScriptSerializer
(System.Web.Script.Serialization
) предлагает более простую альтернативу. Однако он, как правило, менее эффективен, чем Newtonsoft.Json
, и имеет меньше функций. Он включён для полноты, но следует избегать его использования в производственных приложениях.
using System.Web.Script.Serialization;
public class Example
{
public static void Main(string[] args)
{
string jsonString = @"{
""Name"": ""Peter Jones"",
""Age"": 40,
""City"": ""Paris""
}";
JavaScriptSerializer serializer = new JavaScriptSerializer();
Person person = serializer.Deserialize<Person>(jsonString);
Console.WriteLine($"Name: {person.Name}");
Console.WriteLine($"Age: {person.Age}");
Console.WriteLine($"City: {person.City}");
}
}
Здесь используется JavaScriptSerializer.Deserialize<Person>()
. Обратите внимание, что вам может потребоваться добавить ссылку на System.Web.Extensions
в зависимости от вашего проекта.
В заключение, JsonConvert.DeserializeObject()
из библиотеки Newtonsoft.Json
рекомендуется за его производительность и функциональность. JObject.Parse()
обеспечивает гибкость, в то время как JavaScriptSerializer()
предоставляет базовую альтернативу. Выберите метод, наиболее подходящий для ваших потребностей. Всегда обрабатывайте потенциальные исключения (например, JsonReaderException
) в производственном коде.