Сериализация (serialization) объектов и работа с XML и JSON в C# - Учим Шарп #26

Поделиться
HTML-код
  • Опубликовано: 13 фев 2019
  • Сериализация (serialization) объектов и работа с XML и JSON в языке программирования C#
    На этом занятии мы узнаем, что такое сериализация (serialization) в языке программирования C# и научимся ее использовать для преобразования объекта в поток байт для его сохранения или передачи. Познакомимся с языком разметки XML (XmlSerializer) и текстовым форматом обмена данными JSON (DataContractJsonSerializer), а также сериализовать в бинарные данные (BinaryFormatter) и в формате протокола обмена данными SOAP (SoapFormatter). Познакомимся с основными атрибутами (Serializable, NonSerialized), необходимыми для работы с классами.
    -----------
    ПОДПИШИСЬ на соцсети:
    🔴 TELEGRAM: bit.ly/tg_codeblog
    🔴 VK: bit.ly/vk_codeblog
    🔴 INSTAGRAM: bit.ly/inst_codeblog
    🔴 Яндекс Дзен: bit.ly/zen_codeblog
    🔴 FACEBOOK: bit.ly/fb_codeblog
    🔴 TWITTER: bit.ly/twit_codeblog
    🔴 Мой блог: bit.ly/site_codeblog
    -----------
    ПОДДЕРЖИ развитие CODE BLOG:
    💲 Донат: bit.ly/donate_codeblog
    💲 Спонсорство: bit.ly/patreon_codeblog
    -----------
    СМОТРИ мои обучающие курсы:
    👉 УЧИМ ШАРП: bit.ly/cs_codeblog
    👉 ПРАКТИЧЕСКИЙ ИНТЕНСИВ #1: bit.ly/fit_codeblog
    👉 ПРАКТИЧЕСКИЙ ИНТЕНСИВ #2: bit.ly/crm_codeblog
    👉 СТРУКТУРЫ ДАННЫХ: bit.ly/ds_codeblog
    👉 АЛГОРИТМЫ СОРТИРОВКИ: bit.ly/sort_codeblog
    👉 ОТВЕТЫ НА ВОПРОСЫ: bit.ly/faq_codeblog
    👉 IT ПЕРЕОЗВУЧКА: bit.ly/resound_codeblog
    👉 НЕЙРОННАЯ СЕТЬ: bit.ly/ai_codeblog
    👉 ПАТТЕРНЫ ПРОЕКТИРОВАНИЯ: bit.ly/pattern_codeblog
    👉 CODE REVIEW: bit.ly/review_codeblog
    👉 CLR via C#: bit.ly/clr_codeblog
    -----------
    Кстати, меня зовут Шванов Вадим, и я профессиональный .NET разработчик с 2011 года и автор этого канала CODE BLOG. Я рассказываю про IT технологии и веду абсолютно бесплатный курс по языку C# с нуля. В его рамках мы рассмотрим как базовый синтаксис языка C Sharp, так и его практическое применение и специальные технологии, такие как ASP .NET, .NET Core, ASP.NET MVC, Unity, WPF, структуры данных и алгоритмы, с#, dotnet, паттерны проектирования, информатика, csharp, программное обеспечение и многое другое. Для меня важно не только показать практическое применение языка си шарп, но и объяснить основную идею и базовые понятия Computer Science. В качестве основного инструмента разработки используется Visual Studio c# и проекты на Visual c#. Если вам нравятся такие каналы как хауди хо, айти борода, Soer или ExtremeCode, то здесь вам точно понравится.
    -----------
    #codeblog #программирование #csharp #ityoutubersru #программист #разработка

Комментарии • 56

  • @CODEBLOG
    @CODEBLOG  5 лет назад +8

    На этом занятии мы узнаем, что такое сериализация (serialization) в языке программирования C# и научимся ее использовать для преобразования объекта в поток байт для его сохранения или передачи. Познакомимся с языком разметки XML (XmlSerializer) и текстовым форматом обмена данными JSON (DataContractJsonSerializer), а также сериализовать в бинарные данные (BinaryFormatter) и в формате протокола обмена данными SOAP (SoapFormatter). Познакомимся с основными атрибутами (Serializable, NonSerialized), необходимыми для работы с классами.

  • @mcimba2515
    @mcimba2515 3 года назад +16

    Хорошая лекция для 2-х человек из чата которые и так в теме.

    • @user-hh4wb6go6n
      @user-hh4wb6go6n 3 месяца назад

      но по итогу 41 тыс просмотров)

  • @sergeypopov9971
    @sergeypopov9971 Год назад

    Спасибо 500 лет не мог понять как массив объектов в файл сохранить.
    не часто пишу коменты, но шас я очень благодарен.

  • @Keeytari
    @Keeytari 5 лет назад +5

    Привет, смотрю каждый ролик. На 1 стрим даже забегал (На стримы не забегаю потому что не успеваю досмотреть все последние записи стримов, так как пытаюсь полностью понять тему, а если не понял то приходится пересматривать.).Хочу сказать большое спасибо за твои ролики.Мне очень нравятся твои уроки.Сейчас только начну просматривать данную запись/урок.Ещё раз спасибо за твои видео, очень давно искал такие уроки на ютубе, но все обычно дают поверхностную инфу. А по твоим комментариям, я понял что ты хочешь сделать очень прямо много уроков.(Кст, про Unity и Геймдев, я спрашивал.).Спасибо, надеюсь твой канал будет намного популярнее чем сейчас.

  • @xan7832
    @xan7832 11 месяцев назад +4

    36:30 BinaryFormatter
    1:01:12 SOAP
    1:12:24 XML
    1:17:03 JSON

  • @qwerty89993
    @qwerty89993 8 месяцев назад

    спасибо большое!

  • @user-ej3lt6ne6j
    @user-ej3lt6ne6j 3 года назад +3

    Вадим, ты просто святой!
    Прохожу стажировку на программиста и целый день пытался узнать что за такой нахер xml, и xml schema. Ничего не понял. Потом увидел что у тебя видос затрагивает эту тему, посмотрел и как только понял)) Кстати заодно ещё и про сериализацию узнал. Очень многому ты меня научил) Спасибо!

    • @CODEBLOG
      @CODEBLOG  3 года назад

      Очень рад, что смог помочь )

  • @user-cw9ev9dq4v
    @user-cw9ev9dq4v 4 года назад +3

    Спасибо большое. Ваши видео очень полезные.

    • @CODEBLOG
      @CODEBLOG  4 года назад +1

      Всегда пожалуйста )

  • @user-tx2uv8tb8f
    @user-tx2uv8tb8f 3 года назад +3

    Действительно ли json меньше занимает места? Данные-то на стриме сохраняются разные. (Для сравнения, все поля были сделаны public set, чтобы объем сохраняемой информации был одинаков)
    На 100к Студентах получилось:
    Serialized group.bin - 294ms Size - 3516kb
    Deserialized group.bin - 299ms
    Serialized group.soap - 1468ms Size - 49469kb
    Deserialized group.soap - 2821ms
    Serialized group.xml - 141ms Size - 11990kb
    Deserialized group.xml - 196ms
    Serialized groupRun.json - 204ms Size - 10037kb
    Deserialized groupRun.json - 521ms
    Serialized groupText.json - 100ms Size - 5056kb
    Deserialized groupText.json - 219ms
    Бинарник меньше
    *Примечание: при использовании DataContractJsonSerializer(groupRun) использовались аттрибуты System.Runtime (те же самые, что и для Binary и SOAP), из-за этого названия свойств в итоговом файле значительно увеличиваются. Пример можно увидеть на стриме 1:29:20 для класса Group
    P.S. Вадим, вернись. Ждем)

  • @user-yo7mw6oj4p
    @user-yo7mw6oj4p 5 лет назад +1

    Спасибо. Познавательно.

    • @CODEBLOG
      @CODEBLOG  5 лет назад

      Рад, что интересно )

  • @stan5214
    @stan5214 4 года назад

    Вадим в который раз именно в твоем видео я нахожу ответ на свой вопрос

  • @Mulcidei
    @Mulcidei 3 года назад +1

    Добрий день спасибо за урок а где можно найти силку на github исходний код етого урока?

  • @andy_top6676
    @andy_top6676 5 месяцев назад

    В чем преимущество использования runtime сериализаторов? На практике думаю 90% используется либо newton json либо text json. И да, на данный момент .NET отказаись использовать IFormatter из за проблем с безопасностью.

  • @ivanomelchenko1895
    @ivanomelchenko1895 3 года назад

    подскажи как подключиться к твоим урокам. не то пытаюсь не могу.

  • @Fikusiklol
    @Fikusiklol 2 года назад

    Привет!
    А на то время был обычный static JSON?
    Ему не надо никакие [Serializable] (но атрибуты он принимает), не нужны сетеры (если есть ок ctor) и он "слегка по своему" читает приватные поля.
    JsonSerializer.Serialize(fs, employees); // ( FileStream fs , object? obj )
    var emps = JsonSerializer.Deserialize(fs);
    Сори за формат/имена, сами using проставите.

  • @AlexKwestCraft
    @AlexKwestCraft 5 лет назад

    А Newtonsoft для работы с JSON юзается в среде разрабов или стандартная system.Runtime.Serialization.Json вызывает больше доверия. И в чем их разница?

    • @CODEBLOG
      @CODEBLOG  5 лет назад

      Разные разработчики, немного разные реализации. принцип приблизительно одинаковый )

  • @well-playru3070
    @well-playru3070 Год назад

    А есть урок, где идет подключения к базе данных и из полей базы данных формируется xml ?

    • @user-th4ws1cq4c
      @user-th4ws1cq4c Год назад

      С помощью Entity Framework достаешь из БД записи в свои объекты и сериализируешь их в XML (я за сериализацию кнч почти не шарю, но с Entity Framework знаком, и он точно сможет сделать для тебя самую сложную работу - достать из БД записи в твои объекты).

  • @kotikovdmitry4274
    @kotikovdmitry4274 4 года назад +1

    Очень познавательно, НО не хватает примера передачи сериализованой строки\файла и десериализации у клиента. Интересно как именно передавать, например, через WCF и как распаковать сложные объекты у клиента.

  • @csharpcplusplus6861
    @csharpcplusplus6861 4 года назад +4

    жесть в java все гораздо сложнее, чет жалею что ее все таки стал учить. Тут в .net все есть ,а в java куча библиотек...

  • @user-np1hh3pt7y
    @user-np1hh3pt7y 5 лет назад +1

    Добрый день. А как расшифровать этот бинарник , что бы в нормальном (читаемом, понимаемом для человека виде) прочитать его? 54:00

    • @CODEBLOG
      @CODEBLOG  5 лет назад

      Так бинарник не нужно читать человеку, это для приложения ) если хочешь что-то более легко воспринимаемое человеком - возьми json или xml )

    • @user-np1hh3pt7y
      @user-np1hh3pt7y 5 лет назад +1

      @@CODEBLOG мне надо, хочу пентагон всзломать)

  • @RoToR682
    @RoToR682 4 года назад +4

    2 часа видео. А информации полезной на 10минут.

    • @vitaliivynnyk9642
      @vitaliivynnyk9642 3 года назад

      через клоунов, которые не могут сами прочитать или попробовать

  • @user-qq4oi3nh6o
    @user-qq4oi3nh6o 3 года назад +1

    Если бы еще проговаривали что вы делаете ("Это будет принимать такое значение", тут будем хранить то - то), цены б Вам не было. Так как я знаю ищу, но чтобы понять, не хотелось бы пересматривать весь плейлист, заодно то что повторяется лучше откладывается в голове если, чаще напоминать, так как не всегда пользуются всем, и что-то забывается))

  • @user-nv4yz5bt4g
    @user-nv4yz5bt4g 4 года назад

    Как сериализуются массивы ?

  • @user-nf8jf8cl8z
    @user-nf8jf8cl8z 4 года назад

    У меня почему-то json получился на треть больше по памяти чем бинарный (bin 787 байт; json 1090 байт). :/

  • @a.tereshko
    @a.tereshko 5 лет назад +5

    Очень много воды. Первые 15 мин можно смело перематывать. Хотелось бы более четкого выражения мыслей, а ожидание пока автор на ходу сформулирует мысль или подберет подходящий пример немного раздражает...
    С точки зрения того кто уже знает другие языки это видео можно было уместить 20-30 мин вместо 2ч.

    • @juliusmalkov9620
      @juliusmalkov9620 5 лет назад +2

      ну блин стримы они такие, если ты не знал. Конечно можно снять видео и передать всю суть и примеры за 20 минут, но что то будет , не учтено, вопросы у людей останутся, да и куча потраченного времени потрачено на монтаж и пр пр пр. Благо можно смотреть в записи, можно перематывать, можно даже увеличивать скорость)

    • @fazleev
      @fazleev 5 лет назад +2

      При просмотре включаю четвёртую скорость. Если становится неразборчиво - на третью-вторую перехожу. В итоге двухчасовой стрим укладывается в 40-50 минут

  • @nonameforest9923
    @nonameforest9923 4 года назад

    Пример: я сохраняю в json файл корды игрока X Y и его спрайт(char символ) когда я смотрю в файл то у меня там вот это "1213"&"" где 12 - X,13 - Y, "&" - спрайт и что делать
    Вот код :
    using System;
    using System.IO;
    using System.Runtime.Serialization;
    using System.Runtime.Serialization.Json;
    namespace Tests
    {
    class Program
    {
    static void Main(string[] args)
    {
    var pl = new Player(0,0,'&');
    bool Exit = false;
    Console.CursorVisible = false;
    while (!Exit)
    {
    pl.Display();
    if (pl.X > -1 && pl.Y > -1)
    {
    switch (Console.ReadKey(true).Key)
    {
    case ConsoleKey.W:
    pl.Remove();
    pl.Y--;
    break;
    case ConsoleKey.S:
    pl.Remove();
    pl.Y++;
    break;
    case ConsoleKey.A:
    pl.Remove();
    pl.X--;
    break;
    case ConsoleKey.D:
    pl.Remove();
    pl.X++;
    break;
    case ConsoleKey.Escape:
    pl.SavePlayerInfo();
    Exit = true;
    break;
    }
    }
    }
    }
    }
    [DataContract]
    class Player
    {
    string Path = "PlayerInfo.json";
    DataContractJsonSerializer jsonSerialize = new DataContractJsonSerializer(typeof(Player));
    [DataMember]
    public int X { get; set; }
    [DataMember]
    public int Y { get; set; }
    [DataMember]
    public char Sprite { get; set; }
    public Player(int x,int y,char sprite)
    {
    X = x;
    Y = y;
    Sprite = sprite;
    }
    public void Display()
    {
    Console.ForegroundColor = ConsoleColor.Blue;
    Console.SetCursorPosition((int)X,(int)Y);
    Console.WriteLine(Sprite);
    Console.ResetColor();
    }
    public void SavePlayerInfo()
    {
    using (var stream = new FileStream(Path,FileMode.OpenOrCreate))
    {
    jsonSerialize.WriteObject(stream,X);
    jsonSerialize.WriteObject(stream, Y);
    jsonSerialize.WriteObject(stream, Sprite);
    }
    }
    public void Remove()
    {
    Console.SetCursorPosition((int)X,(int)Y);
    Console.WriteLine(' ');
    }
    }
    }

    • @alex_konor2197
      @alex_konor2197 2 года назад

      А мозгов не хватило сохранять данные игрока в одномерный массив, вместо вечного парсинга по элементу?

  • @garretgrom5823
    @garretgrom5823 4 года назад

    Можете скинуть источники?

    • @CODEBLOG
      @CODEBLOG  4 года назад +1

      Вот наверное лучший источник :) docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/concepts/serialization/

  • @EdwardNorthwind
    @EdwardNorthwind 4 года назад +1

    Хитрюга)))) мало того, что в бинарном файле есть private поля, так там еще и кириллические символы, которые по 2 байта, когда как в json - короткие кодовые латинские имена с короткими названиями полей))))

    • @CODEBLOG
      @CODEBLOG  4 года назад

      Ну да, вот такие вот особенности )

  • @user-cb2ql2jy9p
    @user-cb2ql2jy9p 3 года назад

    значит хря все переходят на протобаф, надо назад на json

  • @user-mn2po8ns2z
    @user-mn2po8ns2z 4 года назад +1

    2 часа слушаешь байки, смотришь на переписку, находишь то что искал.. xml вроде пишешь так же всё.. но нихера не работает, потому что где-то промеж переписки, он тчто-то поменял.. и теперь тебе нужно просмотреть эти 2 часа, чтобы найти где он там ччего поменял!

  • @yran735
    @yran735 3 года назад +2

    Очень много лишней информации, недостаточно пояснений, все вперемешку, длительность лекции больше стандартной в вузе, как результат в голове у людей каша и 0 результата. Все что вы писали тут час, можно найти с лёгким объяснением в поисковике. Информацию надо подавать кратко, сжато, но полно. Может вы и хороший программист, но не преподаватель по жизни, задумайтесь. Оценка: неуд.

    • @alex_konor2197
      @alex_konor2197 2 года назад +1

      Ахаха. Пришёл учится, не понял, обиделся и поставил оценку. Очень смешной.

    • @gilly9175
      @gilly9175 Год назад

      @@alex_konor2197 Надеюсь за 5 месяцов ты уже овладел навыком чтения, но я все же процитирую то, что написал автор комментария "Все что вы писали тут час, можно найти с лёгким объяснением в поисковике...". Да и даже если не понял, что смешного?) Человек высказал свою точку зрения так то

  • @vasyljrorshak7455
    @vasyljrorshak7455 3 года назад +1

    Для кого вы это снимаете, ничерта не понятно и еще одновременно там чат какой то читаете. вообще бред сивой кобылы.