KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

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

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Троелсен Эндрю, "Язык программирования C#9 и платформа .NET5" бесплатно, без регистрации.
Перейти на страницу:

    "hasTweeters": true,

    "hasSubWoofers": false,

    "stationPresets": [

      89.3,

      105.1,

      97.1

    ],

    "radioId": "XF-552RR6"

  },

  "isHatchBack": false

}

При чтении данных JSON в коде C# по умолчанию поддерживается чувствительность к регистру символов. Политика именования соответствует настройке

PropertyNamingPolicy
, применяемой во время десериализации. Если ничего не установлено, тогда используется стандартный стиль Pascal. Установка
PropertyNamingPolicy
в
CamelCase
свидетельствует об ожидании того, что все входящие данные JSON должны быть представлены в "верблюжьем" стиле. Если политики именования не совпадают, то процесс десериализации (рассматриваемый далее) потерпит неудачу.

При десериализации JSON существует третий вариант — нейтральность к политике именования. Установка параметра

PropertyNameCaseInsensitive
в
true
приводит к тому, что
canSubmerge
и
CanSubmerge
будут десериализироваться. Вот код установки этого параметра:

JsonSerializerOptions options = new()

{

  PropertyNameCaseInsensitive = true,

  IncludeFields = true

};

Обработка чисел с помощью JsonSerializer

Стандартным режимом обработки чисел является

Strict
, который предусматривает, что числа будут сериализироваться как числа (без кавычек) и сериализироваться как числа (без кавычек). В классе
JsonSerializerOptions
имеется свойство
NumberHandling
, которое управляет чтением и записью чисел. В табл. 20.14 перечислены значения, доступные в перечислении
JsonNumberHandling
.

Язык программирования C#9 и платформа .NET5 - _141.png

Перечисление

JsonNumberHandling
имеет атрибут
flags
, который делает возможным побитовое сочетание его значений. Например, если вы хотите читать строки (и числа) и записывать числа в виде строк, тогда применяйте следующую настройку:

JsonSerializerOptions options = new()

{

   ...

   NumberHandling = JsonNumberHandling.AllowReadingFromString &

                    JsonNumberHandling.
WriteAsString

};

При таком изменении данные JSON, созданные для класса

Car
, будут выглядеть так:

{

  "canFly": true,

  "canSubmerge": false,

  "theRadio": {

    "hasTweeters": true,

    "hasSubWoofers": false,

    "stationPresets": [

<b>      &quot;89.3&quot;,</b>

<b>      &quot;105.1&quot;,</b>

<b>      &quot;97.1&quot;</b>

    ],

    &quot;radioId&quot;: &quot;XF-552RR6&quot;

  },

  &quot;isHatchBack&quot;: false

}

Потенциальные проблемы, связанные с производительностью, при использовании JsonSerializerOption

В случае применения класса

JsonSerializerOption
лучше всего создать единственный экземпляр и многократно использовать его повсюду в приложении. С учетом сказанного модифицируйте операторы верхнего уровня и методы, относящиеся к JSON, как показано ниже:

JsonSerializerOptions options = new()

{

    PropertyNameCaseInsensitive = true,

    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,

    IncludeFields = true,

    WriteIndented = true,

    NumberHandling =

      JsonNumberHandling.AllowReadingFromString
 |

      JsonNumberHandling.
WriteAsString

};

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

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

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

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

static void SaveAsJsonFormat&lt;T&gt;(JsonSerializerOptions options,

  T objGraph, string fileName)

=&gt; File.WriteAllText(fileName,

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

Стандартные настройки свойств JsonSerializer для веб-приложений

При построении веб-приложений вы можете применять специализированный конструктор для установки следующих свойств:

PropertyNameCaseInsensitive = true,

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*