Сериализация (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 #программист #разработка
На этом занятии мы узнаем, что такое сериализация (serialization) в языке программирования C# и научимся ее использовать для преобразования объекта в поток байт для его сохранения или передачи. Познакомимся с языком разметки XML (XmlSerializer) и текстовым форматом обмена данными JSON (DataContractJsonSerializer), а также сериализовать в бинарные данные (BinaryFormatter) и в формате протокола обмена данными SOAP (SoapFormatter). Познакомимся с основными атрибутами (Serializable, NonSerialized), необходимыми для работы с классами.
Хорошая лекция для 2-х человек из чата которые и так в теме.
но по итогу 41 тыс просмотров)
Спасибо 500 лет не мог понять как массив объектов в файл сохранить.
не часто пишу коменты, но шас я очень благодарен.
Привет, смотрю каждый ролик. На 1 стрим даже забегал (На стримы не забегаю потому что не успеваю досмотреть все последние записи стримов, так как пытаюсь полностью понять тему, а если не понял то приходится пересматривать.).Хочу сказать большое спасибо за твои ролики.Мне очень нравятся твои уроки.Сейчас только начну просматривать данную запись/урок.Ещё раз спасибо за твои видео, очень давно искал такие уроки на ютубе, но все обычно дают поверхностную инфу. А по твоим комментариям, я понял что ты хочешь сделать очень прямо много уроков.(Кст, про Unity и Геймдев, я спрашивал.).Спасибо, надеюсь твой канал будет намного популярнее чем сейчас.
Все сбылось)
36:30 BinaryFormatter
1:01:12 SOAP
1:12:24 XML
1:17:03 JSON
спасибо большое!
Вадим, ты просто святой!
Прохожу стажировку на программиста и целый день пытался узнать что за такой нахер xml, и xml schema. Ничего не понял. Потом увидел что у тебя видос затрагивает эту тему, посмотрел и как только понял)) Кстати заодно ещё и про сериализацию узнал. Очень многому ты меня научил) Спасибо!
Очень рад, что смог помочь )
Спасибо большое. Ваши видео очень полезные.
Всегда пожалуйста )
Действительно ли 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. Вадим, вернись. Ждем)
Спасибо. Познавательно.
Рад, что интересно )
Вадим в который раз именно в твоем видео я нахожу ответ на свой вопрос
Добрий день спасибо за урок а где можно найти силку на github исходний код етого урока?
В чем преимущество использования runtime сериализаторов? На практике думаю 90% используется либо newton json либо text json. И да, на данный момент .NET отказаись использовать IFormatter из за проблем с безопасностью.
подскажи как подключиться к твоим урокам. не то пытаюсь не могу.
Привет!
А на то время был обычный static JSON?
Ему не надо никакие [Serializable] (но атрибуты он принимает), не нужны сетеры (если есть ок ctor) и он "слегка по своему" читает приватные поля.
JsonSerializer.Serialize(fs, employees); // ( FileStream fs , object? obj )
var emps = JsonSerializer.Deserialize(fs);
Сори за формат/имена, сами using проставите.
А Newtonsoft для работы с JSON юзается в среде разрабов или стандартная system.Runtime.Serialization.Json вызывает больше доверия. И в чем их разница?
Разные разработчики, немного разные реализации. принцип приблизительно одинаковый )
А есть урок, где идет подключения к базе данных и из полей базы данных формируется xml ?
С помощью Entity Framework достаешь из БД записи в свои объекты и сериализируешь их в XML (я за сериализацию кнч почти не шарю, но с Entity Framework знаком, и он точно сможет сделать для тебя самую сложную работу - достать из БД записи в твои объекты).
Очень познавательно, НО не хватает примера передачи сериализованой строки\файла и десериализации у клиента. Интересно как именно передавать, например, через WCF и как распаковать сложные объекты у клиента.
жесть в java все гораздо сложнее, чет жалею что ее все таки стал учить. Тут в .net все есть ,а в java куча библиотек...
Добрый день. А как расшифровать этот бинарник , что бы в нормальном (читаемом, понимаемом для человека виде) прочитать его? 54:00
Так бинарник не нужно читать человеку, это для приложения ) если хочешь что-то более легко воспринимаемое человеком - возьми json или xml )
@@CODEBLOG мне надо, хочу пентагон всзломать)
2 часа видео. А информации полезной на 10минут.
через клоунов, которые не могут сами прочитать или попробовать
Если бы еще проговаривали что вы делаете ("Это будет принимать такое значение", тут будем хранить то - то), цены б Вам не было. Так как я знаю ищу, но чтобы понять, не хотелось бы пересматривать весь плейлист, заодно то что повторяется лучше откладывается в голове если, чаще напоминать, так как не всегда пользуются всем, и что-то забывается))
Как сериализуются массивы ?
У меня почему-то json получился на треть больше по памяти чем бинарный (bin 787 байт; json 1090 байт). :/
Очень много воды. Первые 15 мин можно смело перематывать. Хотелось бы более четкого выражения мыслей, а ожидание пока автор на ходу сформулирует мысль или подберет подходящий пример немного раздражает...
С точки зрения того кто уже знает другие языки это видео можно было уместить 20-30 мин вместо 2ч.
ну блин стримы они такие, если ты не знал. Конечно можно снять видео и передать всю суть и примеры за 20 минут, но что то будет , не учтено, вопросы у людей останутся, да и куча потраченного времени потрачено на монтаж и пр пр пр. Благо можно смотреть в записи, можно перематывать, можно даже увеличивать скорость)
При просмотре включаю четвёртую скорость. Если становится неразборчиво - на третью-вторую перехожу. В итоге двухчасовой стрим укладывается в 40-50 минут
Пример: я сохраняю в 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(' ');
}
}
}
А мозгов не хватило сохранять данные игрока в одномерный массив, вместо вечного парсинга по элементу?
Можете скинуть источники?
Вот наверное лучший источник :) docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/concepts/serialization/
Хитрюга)))) мало того, что в бинарном файле есть private поля, так там еще и кириллические символы, которые по 2 байта, когда как в json - короткие кодовые латинские имена с короткими названиями полей))))
Ну да, вот такие вот особенности )
значит хря все переходят на протобаф, надо назад на json
2 часа слушаешь байки, смотришь на переписку, находишь то что искал.. xml вроде пишешь так же всё.. но нихера не работает, потому что где-то промеж переписки, он тчто-то поменял.. и теперь тебе нужно просмотреть эти 2 часа, чтобы найти где он там ччего поменял!
Очень много лишней информации, недостаточно пояснений, все вперемешку, длительность лекции больше стандартной в вузе, как результат в голове у людей каша и 0 результата. Все что вы писали тут час, можно найти с лёгким объяснением в поисковике. Информацию надо подавать кратко, сжато, но полно. Может вы и хороший программист, но не преподаватель по жизни, задумайтесь. Оценка: неуд.
Ахаха. Пришёл учится, не понял, обиделся и поставил оценку. Очень смешной.
@@alex_konor2197 Надеюсь за 5 месяцов ты уже овладел навыком чтения, но я все же процитирую то, что написал автор комментария "Все что вы писали тут час, можно найти с лёгким объяснением в поисковике...". Да и даже если не понял, что смешного?) Человек высказал свою точку зрения так то
Для кого вы это снимаете, ничерта не понятно и еще одновременно там чат какой то читаете. вообще бред сивой кобылы.