Потенциальные проблемы, связанные с производительностью, при использовании JsonSerializerOption
В случае применения класса JsonSerializerOption
JsonSerializerOptions options = new()
{
PropertyNameCaseInsensitive = true,
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
IncludeFields = true,
WriteIndented = true,
NumberHandling =
JsonNumberHandling.AllowReadingFromString
| JsonNumberHandling.
WriteAsString};
SaveAsJsonFormat(options, jbc, "CarData.json");
Console.WriteLine("=> Saved car in JSON format!");
SaveAsJsonFormat(options, p, "PersonData.json");
Console.WriteLine("=> Saved person in JSON format!");
static void SaveAsJsonFormat
T objGraph, string fileName)
=> File.WriteAllText(fileName,
System.Text.Json.JsonSerializer.Serialize(objGraph,
options));Стандартные настройки свойств JsonSerializer для веб-приложений
При построении веб-приложений вы можете применять специализированный конструктор для установки следующих свойств:
PropertyNameCaseInsensitive = true,
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
NumberHandling = JsonNumberHandling.AllowReadingFromString
Вы по-прежнему можете устанавливать дополнительные свойства через инициализацию объектов, например:
JsonSerializerOptions options = new(JsonSerializerDefaults.Web)
{
WriteIndented = true
};
Сериализация коллекций объектов
Сериализация коллекций объектов в данные JSON выполняется аналогично сериализации одиночного объекта. Поместите приведенную далее локальную функцию в конец операторов верхнего уровня:
static void SaveListOfCarsAsJson(JsonSerializerOptions options, string fileName)
{
// Сохранить список List
List
{
new JamesBondCar { CanFly = true, CanSubmerge = true },
new JamesBondCar { CanFly = true, CanSubmerge = false },
new JamesBondCar { CanFly = false, CanSubmerge = true },
new JamesBondCar { CanFly = false, CanSubmerge = false },
};
File.WriteAllText(fileName,
System.Text.Json.JsonSerializer.Serialize(myCars, options));
Console.WriteLine("=> Saved list of cars!");
}
В заключение добавьте следующую строку, чтобы задействовать новую функцию:
SaveListOfCarsAsJson(options, "CarCollection.json");
Десериализация объектов и коллекций объектов
Как и десериализация XML, десериализация JSON является противоположностью сериализации. Показанная ниже функция будет десериализировать данные JSON в тип, заданный при вызове обобщенной версии метода:
static T ReadAsJsonFormat
string fileName) =>
System.Text.Json.JsonSerializer.Deserialize
(File.ReadAllText(fileName), options);
Добавьте к операторам верхнего уровня следующий код для восстановления объектов (или списка объектов) из данных JSON:
JamesBondCar savedJsonCar =
ReadAsJsonFormat
Console.WriteLine("Read Car: {0}", savedJsonCar.ToString());
List