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

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

Книгу Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

178 0 18:04, 26-08-2023
Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
26 август 2023

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

В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле. Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных. Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.

    1 ... 242 243 244 245 246 247 248 249 250 ... 407
    Перейти на страницу:
    имен System.Xml.Serialization. В табл. 20.12 описаны некоторые (но не все) атрибуты .NET Core, влияющие на способ кодирования данных XML в потоке.

    Разумеется, для управления тем, как XmlSerializer генерирует результирующий XML-документ, можно использовать многие другие атрибуты .NET Core. Полные сведения ищите в описании пространства имен System.Xml.Serialization в документации по .NET Core.

    На заметку! Класс XmlSerializer требует, чтобы все сериализируемые типы в графе объектов поддерживали стандартный конструктор (поэтому обязательно добавьте его обратно, если вы определяете специальные конструкторы).

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

    Добавьте в свой файл Program.cs следующую локальную функцию:

    static void SaveAsXmlFormat<T>(T objGraph, string fileName)

    {

      // В конструкторе XmlSerializer должен быть объявлен тип.

      XmlSerializer xmlFormat = new XmlSerializer(typeof(T));

      using (Stream fStream = new FileStream(fileName,

        FileMode.Create, FileAccess.Write, FileShare.None))

      {

        xmlFormat.Serialize(fStream, objGraph);

      }

    }

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

    SaveAsXmlFormat(jbc, "CarData.xml");

    Console.WriteLine("=> Saved car in XML format!");

    SaveAsXmlFormat(p, "PersonData.xml");

    Console.WriteLine("=> Saved person in XML format!");

    Заглянув внутрь сгенерированного файла CarData.xml, вы обнаружите в нем показанные ниже XML-данные:

    <?xml version="1.0"?>

    <JamesBondCar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

     xmlns:xsd= "http://www.w3.org/2001/XMLSchema" xmlns="http://www.MyCompany.com">

      <TheRadio>

        <HasTweeters>true</HasTweeters>

        <HasSubWoofers>false</HasSubWoofers>

        <StationPresets>

          <double>89.3</double>

          <double>105.1</double>

          <double>97.1</double>

        </StationPresets>

        <RadioId>XF-552RR6</RadioId>

      </TheRadio>

      <IsHatchBack>false</IsHatchBack>

      <CanFly>true</CanFly>

      <CanSubmerge>false</CanSubmerge>

    </JamesBondCar>

    Если вы хотите указать специальное пространство имен XML, которое уточняет JamesBondCar и кодирует значения canFly и canSubmerge в виде атрибутов XML, тогда модифицируйте определение класса JamesBondCar следующим образом:

    [Serializable, XmlRoot(Namespace = "http://www.MyCompany.com")]

    public class JamesBondCar : Car

    {

      [XmlAttribute]

      public bool CanFly;

      [XmlAttribute]

      public bool CanSubmerge;

    ...

    }

    Вот как будет выглядеть результирующий XML-документ (обратите внимание на открывающий элемент <JamesBondCar>):

    <?xml version="1.0"""?>

    <JamesBondCar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xmlns:xsd="http://www.w3.org/2001/XMLSchema"

      CanFly="true" CanSubmerge="false" xmlns="http://www.MyCompany.com">

    ...

    </JamesBondCar>

    Исследуйте содержимое файла PersonData.xml:

    <?xml version="1.0"?>

    <Person xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance

      xmlns:xsd= "http://www.w3.org/2001/XMLSchema">

      <IsAlive>true</IsAlive>

      <FirstName>James</FirstName>

    </Person>

    Важно отметить, что свойство PersonAge не сериализируется в XML. Это подтверждает, что сериализация XML учитывает только открытые свойства и поля.

    Сериализация коллекций объектов

    Теперь, когда вы видели, каким образом сохранять одиночный объект в потоке, давайте посмотрим,как сохранить набор объектов. Создайте локальную функцию, которая инициализирует список объектов JamesBondCar и сериализирует его в XML:

    static void SaveListOfCarsAsXml()

    {

      // Сохранить список List<T> объектов JamesBondCar.

      List<JamesBondCar> myCars = new()

        {

          new JamesBondCar{CanFly = true, CanSubmerge = true},

          new JamesBondCar{CanFly = true, CanSubmerge = false},

          new JamesBondCar{CanFly = false, CanSubmerge = true},

          new JamesBondCar{CanFly = false, CanSubmerge = false},

        };

      using (Stream fStream = new FileStream("CarCollection.xml",

        FileMode.Create, FileAccess.Write, FileShare.None))

      {

        XmlSerializer xmlFormat = new XmlSerializer(typeof(List<JamesBondCar>));

        xmlFormat.Serialize(fStream, myCars);

      }

      Console.WriteLine("=> Saved list of cars!");

    }

    Наконец, добавьте следующую строку, чтобы задействовать новую функцию:

    SaveListOfCarsAsXml(); 

    Десериализация объектов и коллекций объектов

    Десериализация XML буквально противоположна сериализации объектов (и коллекций объектов). Рассмотрим показанную далее локальную функцию для десериализации XML-разметки обратно в граф объектов. И снова обратите внимание, что тип, с которым нужно работать, должен быть передан конструктору XmlSerializer:

    static T ReadAsXmlFormat<T>(string fileName)

    {

      // Создать типизированный экземпляр класса XmlSerializer.

      XmlSerializer xmlFormat = new XmlSerializer(typeof(T));

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

      {

        T obj = default;

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

        return obj;

      }

    }

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

    JamesBondCar savedCar = ReadAsXmlFormat<JamesBondCar>("CarData.xml");

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

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

    List<JamesBondCar> savedCars =

        ReadAsXmlFormat<List<JamesBondCar>>("CarCollection.xml");

    Сериализация и десериализация с помощью 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<T>(T objGraph, string fileName)

    {

      File.WriteAllText(fileName,

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

    }

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

    SaveAsJsonFormat(jbc, "CarData.json");

    Console.WriteLine("=> Saved car in JSON format!");

    SaveAsJsonFormat(p, "PersonData.json");

    Console.WriteLine("=> Saved person in JSON format!");

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

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

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

    1 ... 242 243 244 245 246 247 248 249 250 ... 407
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


    Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Борис Борис14 июнь 00:50 Колокола в России тем и отличались от западных что раскачиаали именно язык колокола,а не сам колокол! Авторы что-жертвы ЕГЭ? Не... Соединенные Штаты России 3 - Полина Ром
    2. Людмила Хофман Людмила Хофман10 июнь 22:13 У меня перевернулся мир после прочтения ваших книг! Так приятно и чисто на душе, ведь по сути неважно кто с кем , а только любовь... Долгая игра - Рейчел Рид
    3. Анна Анна08 июнь 11:28 Спасибо за новую историю жизни и любви на сайте,прочитала с удовольствием .... Давай поженимся - Юлия Резник
    Все комметарии
    Новинки бесплатной онлайн библиотеки