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

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

Читать бесплатно Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен. Жанр: Программирование год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:
как "требует" или "зависит от".

Каждый объект в графе получает уникальное числовое значение. Важно помнить, что числа, присвоенные объектам в графе, являются произвольными и не имеют никакого смысла для внешнего мира. После того как всем объектам назначены числовые значения, граф объектов может записывать набор зависимостей для каждого объекта.

В качестве примера предположим, что создано множество классов, которые моделируют автомобили. Существует базовый класс по имени Car, который "имеет" класс Radio. Другой класс по имени JamesBondCar расширяет базовый тип Car.

На рис. 20.1 показан возможный граф объектов, моделирующий такие отношения. При чтении графов объектов для описания соединяющих стрелок можно использовать выражение "зависит от" или "ссылается на". Таким образом, на рис. 20.1 видно, что класс Car ссылается на класс Radio (учитывая отношение "имеет" ), JamesBondCar ссылается на Car (из-за отношения "является" ), а также на Radio (поскольку наследует эту защищенную переменную-член).

Разумеется, исполняющая среда не рисует картинки в памяти для представления графа связанных объектов. Взамен отношение, показанное на рис. 20.1, представляется математической формулой, которая выглядит следующим образом:

[Car 3, ref 2], [Radio 2], [JamesBondCar 1, ref 3, ref 2]

Проанализировав формулу, вы заметите, что объект 3 (Car) имеет зависимость от объекта 2 (Radio). Объект 2 (Radio) — "одинокий волк", которому никто не нужен. Наконец, объект 1 (JamesBondCar) имеет зависимость от объекта 3, а также от объекта 2. В любом случае при сериализации или десериализации экземпляра JamesBondCar граф объектов гарантирует, что типы Radio и Car тоже примут участие в процессе.

Привлекательность процесса сериализации заключается в том, что граф, представляющий отношения между объектами, устанавливается автоматически "за кулисами". Как будет показано позже в главе, при желании в конструирование графа объектов можно вмешиваться, настраивая процесс сериализации с применением атрибутов и интерфейсов.

Создание примеров типов и написание операторов верхнего уровня

Создайте новый проект консольного приложения .NET 5 по имени SimpleSerialize. Добавьте в проект новый файл класса под названием Radio.cs со следующим кодом:

using System;

using System.Linq;

using System.Collections.Generic;

using System.Text.Json.Serialization;

using System.Xml;

using System.Xml.Serialization;

namespace SimpleSerialize

{

  public class Radio

  {

    public bool HasTweeters;

    public bool HasSubWoofers;

    public List<double> StationPresets;

    public string RadioId = "XF-552RR6";

    public override string ToString()

    {

      var presets = string.Join(",",

                StationPresets.Select(i => i.ToString()).ToList());

       return $"HasTweeters:{HasTweeters}

                HasSubWoofers:{HasSubWoofers} Station Presets:{presets}";

    }

  }

}

Добавьте еще один файл класса по имени Car.cs и приведите его содержимое к такому виду:

using System;

using System.Text.Json.Serialization;

using System.Xml;

using System.Xml.Serialization;

namespace SimpleSerialize

{

  public class Car

  {

    public Radio TheRadio = new Radio();

    public bool IsHatchBack;

    public override string ToString()

      => $"IsHatchback:{IsHatchBack} Radio:{TheRadio.ToString()}";

  }

}

Затем добавьте очередной файл класса по имени JamesBondCar.cs и поместите в него следующий код:

using System;

using System.Text.Json.Serialization;

using System.Xml;

using System.Xml.Serialization;

namespace SimpleSerialize

{

  public class JamesBondCar : Car

  {

    public bool CanFly;

    public bool CanSubmerge;

    public override string ToString()

      => $"CanFly:{CanFly}, CanSubmerge:{CanSubmerge} {base.ToString()}";

  }

}

Ниже показан код финального файла класса Person.cs:

using System;

using System.Text.Json.Serialization;

using System.Xml;

using System.Xml.Serialization;

namespace SimpleSerialize

{

  public class Person

  {

    // Открытое поле.

    public bool IsAlive = true;

    /// Закрытое поле.

    private int PersonAge = 21;

    // Открытое свойство/закрытые данные.

    private string _fName = string.Empty;

    public string FirstName

    {

      get { return _fName; }

      set { _fName = value; }

    }

    public override string ToString() =>

    $"IsAlive:{IsAlive} FirstName:{FirstName} Age:{PersonAge} ";

  }

}

В заключение модифицируйте содержимое файла Program.cs, добавив следующий стартовый код:

using System;

using System.Collections.Generic;

using System.IO;

using System.Text.Json;

using System.Text.Json.Serialization;

using System.Xml;

using System.Xml.Serialization;

using SimpleSerialize;

Console.WriteLine("***** Fun with Object Serialization *****n");

// Создать объект JamesBondCar и установить состояние.

JamesBondCar jbc = new()

{

  CanFly = true,

  CanSubmerge = false,

  TheRadio = new()

     {

       StationPresets = new() {89.3, 105.1, 97.1},

       HasTweeters = true

     }

};

Person p = new()

{

  FirstName = "James",

  IsAlive = true

};

Итак, все готово для того, чтобы приступить к исследованию сериализации XML и JSON.

Сериализация и десериализация с помощью XmlSerializer

 Пространство имен System.Xml предоставляет класс System.Xml.Serialization.XmlSerializer. Этот форматер можно применять для сохранения открытого состояния заданного объекта в виде чистой XML-разметки. Важно отметить, что XmlSerializer требует объявления типа, который будет сериализироваться (или десериализироваться).

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

Если у вас есть опыт работы с технологиями XML, то вы знаете, что часто важно гарантировать соответствие данных внутри документа XML набору правил, которые устанавливают действительность данных. Понятие действительного документа XML не имеет никакого отношения к синтаксической правильности элементов XML (вроде того, что все открывающие элементы должны иметь закрывающие элементы). Действительные документы отвечают согласованным правилам форматирования (например, поле X должно быть выражено в виде атрибута, но не подэлемента), которые обычно задаются посредством схемы XML или файла определения типа документа (Document-Type Definition — DTD).

По умолчанию класс XmlSerializer сериализирует все открытые поля/свойства как элементы XML, а не как атрибуты XML. Чтобы управлять генерацией результирующего документа XML с помощью класса XmlSerializer, необходимо декорировать типы любым количеством дополнительных атрибутов .NET Core из пространства

Перейти на страницу:

Эндрю Троелсен читать все книги автора по порядку

Эндрю Троелсен - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


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

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


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

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

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


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