Жанры книг
Мы в соц.сетях
ParaKnig📚 » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
<< На главную

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Читать онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 371 372 373 374 375 376 377 378 379 ... 642
Перейти на страницу:

  using (Stream fStream = new FileStream(fileName, FileMode.Open))

  {

    T obj = default;

    obj = (T)xmlFormat.Deserialize(fStream);

    return obj;

  }

}

Добавьте к операторам верхнего уровня следующий код, чтобы восстановить XML-разметку обратно в объекты (или списки объектов):

JamesBondCar savedCar = ReadAsXmlFormat&lt;JamesBondCar&gt;(&quot;CarData.xml&quot;);

Console.WriteLine(&quot;Original Car: {0}&quot;,savedCar.ToString());

Console.WriteLine(&quot;Read Car: {0}&quot;,savedCar.ToString());

List&lt;JamesBondCar&gt; savedCars =

    ReadAsXmlFormat&lt;List&lt;JamesBondCar&gt;&gt;(&quot;CarCollection.xml&quot;);

Сериализация и десериализация с помощью System.Text.Json

 В пространстве имен System.Text.Json имеется класс System.Text.Json.JsonSerializer, который вы можете использовать для сохранения открытого состояния заданного объекта как данных JSON.

Управление генерацией данных JSON

 По умолчанию JsonSerializer сериализирует все открытые свойства в виде пар "имя-значение" в формате JSON, применяя такие же имена (и регистр символов), как у имен свойств объекта. Вы можете управлять многими аспектами процесса сериализации с помощью наиболее часто используемых атрибутов, перечисленных в табл. 20.13.

Сериализация объектов с использованием JsonSerializer

Класс JsonSerializer содержит статические методы Serialize(), применяемые для преобразования объектов .NET Core (включая графы объектов) в строковое представление открытых свойств. Данные представляются как пары "имя-значение" в формате JSON. Добавьте в файл Program.cs показанную ниже локальную функцию:

static void SaveAsJsonFormat&lt;T&gt;(T objGraph, string fileName)

{

  File.WriteAllText(fileName,

      System.Text.Json.JsonSerializer.Serialize(objGraph));

}

Добавьте к своим операторам верхнего уровня следующий код:

SaveAsJsonFormat(jbc, &quot;CarData.json&quot;);

Console.WriteLine(&quot;=&gt; Saved car in JSON format!&quot;);

SaveAsJsonFormat(p, &quot;PersonData.json&quot;);

Console.WriteLine(&quot;=&gt; Saved person in JSON format!&quot;);

Когда вы будете исследовать файлы JSON, вас может удивить тот факт, что файл CarData.json пуст (не считая пары фигурных скобок), а файл PersonData.json содержит только значение Firstname. Причина в том, что JsonSerializer по умолчанию записывает только открытые свойства, но не открытые поля. Проблема решается в следующем разделе.

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

Включение полей

Включить открытые поля в генерируемые данные JSON можно двумя способами. Первый способ предусматривает использование класса JsonSerializerOptions для сообщения JsonSerializer о необходимости включить все поля. Второй способ предполагает модификацию классов за счет добавления атрибута [Jsonlnclude] к каждому открытому полю, которое должно быть включено в вывод JSON. Обратите внимание, что при первом способе (применение JsonSerializationOptions) будут включаться все открытые поля в графе объектов. Чтобы исключить отдельные открытые поля с использованием такого приема, вам придется использовать для этих полей атрибут JsonExclude.

Модифицируйте метод SaveAsJsonFormat(), как показано ниже:

static void SaveAsJsonFormat&lt;T&gt;(T objGraph, string fileName)

{

<b>  var options = new JsonSerializerOptions</b>

<b>  {</b>

<b>    IncludeFields = true,</b>

<b>  };</b>

  File.WriteAllText(fileName,

      System.Text.Json.JsonSerializer.Serialize(objGraph, options));

}

Вместо применения класса JsonSerializerOptions того же результата можно достичь, обновив все открытые поля в примерах классов следующим образом (имейте в виду, что вы можете оставить в классах атрибуты Xml и они не будут помехой JsonSerializer):

// Radio.cs

public class Radio

{

<b>  [JsonInclude]</b>

  public bool HasTweeters;

<b>  [JsonInclude]</b>

  public bool HasSubWoofers;

<b>  [JsonInclude]</b>

  public List&lt;double&gt; StationPresets;

<b>  [JsonInclude]</b>

  public string RadioId = &quot;XF-552RR6&quot;;

  ...

}

// Car.cs

public class Car

{

<b>  [JsonInclude]</b>

  public Radio TheRadio = new Radio();

1 ... 371 372 373 374 375 376 377 378 379 ... 642
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Лариса
Лариса 11.03.2026 - 20:17
Странно,здесь имя девочки Аграфена,а на других сайтах я прослушала три книги этого цикла с именем Дарвина.Зачем менять имя и путать читателей? Опечатка- не Дарвина,  а  Дарина.
Григорий
Григорий 09.04.2025 - 22:24
Лучшая книга всех времен
Женя
Женя 02.04.2025 - 16:08
Любимая книга