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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 373 374 375 376 377 378 379 380 381 ... 642

    "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.

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

JsonSerializerOptions options = new()

{

   ...

   NumberHandling = JsonNumberHandling.AllowReadingFromString &

                    JsonNumberHandling.WriteAsString

};

При таком изменении данные JSON, созданные для класса Car, будут выглядеть так:

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

{

  "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,

1 ... 373 374 375 376 377 378 379 380 381 ... 642
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Похожие на Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю книги

Оставить комментарий