Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 21.04.2019
Сообщений: 74

Сериализация json без базовых библиотек

21.05.2020, 23:19. Показов 2389. Ответов 5

Студворк — интернет-сервис помощи студентам
Объясните хотя бы словами, что нужно написать в атрибутах и зачем они здесь нужны?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[JsonObject]
    public class Person
    {
        public Person(int id, string name)
        {
            Id = id;
            Name = name;
            Children = new List<Person>();
        }
        [Json]
        public int Id { get; set; }
        [Json]
        public string Name { get; set; }
        [Json]
        public List<Person> Children { get; set; }
    }
class Program
    {
        static void Main()
        {
            Person person = new Person(1, "Jack");
            person.Children.Add(new Person(2, "Jill"));
            JsonGenerator.GenerateJson(person);
        }
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.05.2020, 23:19
Ответы с готовыми решениями:

Сериализация без стандартных библиотек/средств сериализации
Вечер добрый, форумчане! Вопрос изложен в заголовке темы: &quot;Сериализация без стандартных библиотек/средств сериализации&quot;. Вернее,...

Сериализация JSON
Подскажите дураку как создать следующий JSON средствами QJsonArray QJsonObject QJsonDoument QJsonValue, не могу разобраться { ...

Сериализация в json
Есть сервер-клиент, работает через асинхронные Udp сокеты, каждые 5 миллисекунд обмениваются информацией в формате json. Проблема в том,...

5
172 / 91 / 36
Регистрация: 22.05.2020
Сообщений: 308
23.05.2020, 23:47
chermalina, JsonObject - это, по всей видимости, атрибут библиотеки Json.NET от NewtonSoft. Эти атрибуты используются движком сериализации этой библиотеки, чтобы преобразовывать объекты .NET в строку, содержащую JSON представление (и в обратном направлении).
1
0 / 0 / 0
Регистрация: 21.04.2019
Сообщений: 74
25.05.2020, 00:50  [ТС]
мне нельзя использовать библиотеку для сериализации, задание заключается в том, чтобы написать все самостоятельно
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
25.05.2020, 01:34
Лучший ответ Сообщение было отмечено chermalina как решение

Решение

Цитата Сообщение от chermalina Посмотреть сообщение
Объясните хотя бы словами, что нужно написать в атрибутах и зачем они здесь нужны?
Атрибуты для сериализации не требуются. Различные библиотеки используют их для более тонкой настройки процесса сериализации (задать другое имя полю/свойству, пропустить поле/свойство и т.д.), но в принципе они не нужны.
1
Жесток & Наивен
 Аватар для sanec38
483 / 188 / 91
Регистрация: 02.02.2017
Сообщений: 427
25.05.2020, 07:33
Лучший ответ Сообщение было отмечено chermalina как решение

Решение

Не по теме:

Не так вопрос прочитал



Добавлено через 1 час 20 минут
Кусок кода желающий пожить на свалке, json проходит валидацию на сайте - значит это json,
но у него есть проблемки с отступами, или если сделать одноуровневое вложения, то там уже будет не хватать , . Если захотите сами их поправите. И это конкретно под этот таск - пример.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
        public class Person
        {
            public Person(int id, string name)
            {
                Id = id;
                Name = name;
                Children = new List<Person>();
            }
            public int Id { get; set; }
            public string Name { get; set; }
            public List<Person> Children { get; set; }
        }
 
        private static void Main(string[] args)
        {
            Person person = new Person(1, "Jack");
            person.Children.Add(new Person(2, "Jill"));
            var s = "{" + Environment.NewLine;
            var type = person.GetType();               
            foreach(var item in type.GetProperties())
            {
                s = GetPropertyValue(person, s, person, item);
            }
            s += "}";
            // File.WriteAllText("Result.json", s);
            Console.WriteLine(s);
            Console.ReadLine();
        }
 
        private static string GetPropertyValue<T>(Person person, string s, T obj, PropertyInfo propertyInfo)
        {
            if(propertyInfo.PropertyType == typeof(int))
            {
                s += @$"""{propertyInfo.Name}"" : {propertyInfo.GetValue(obj)},{Environment.NewLine}";
            }
            if(propertyInfo.PropertyType == typeof(string))
            {
                s += @$"""{propertyInfo.Name}"" : ""{propertyInfo.GetValue(obj)}"",{Environment.NewLine}";
            }
            if(propertyInfo.PropertyType == typeof(List<Person>))
            {
                s += @$"""Children"" : [{Environment.NewLine}";
                s += $@"{{ {Environment.NewLine}";
                foreach(var p in (List<Person>)propertyInfo.GetValue(obj))
                {
                    var personInternalType = p.GetType();
                    foreach(var prop in personInternalType.GetProperties())
                    {
                        if(prop.GetValue(p) is List<Person> l && l.Count==0)
                        {
                            s += @$"""Children"":[]{Environment.NewLine}";
                        }
                        else
                        {
                            s = GetPropertyValue(person, s, p, prop);
                           
                        }                                                     
                    }                     
                    s += $@"}} {Environment.NewLine}";
                    s += @$"]{Environment.NewLine}";
                }
            }
            return s;
        }
в с# 8.0
Порядок маркеров $ и @ в интерполированных строках verbatim может быть любым: и $@"...", и @$"..." являются допустимыми интерполированными строками verbatim. В более ранних версиях C# маркер$ должен располагаться перед маркером @.
1
0 / 0 / 0
Регистрация: 21.04.2019
Сообщений: 74
25.05.2020, 16:30  [ТС]
спасибо большое))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.05.2020, 16:30
Помогаю со студенческими работами здесь

Сериализация JSON
Есть иерархия объектов, например такая: var gallery = {}; gallery.img = {name: &quot;Logo&quot;, path: &quot;C://&quot;, day: new Date()}; gallery.img1...

Сериализация JSON в C#
Доброго времени суток! Начал изучать сериализацию JSON и возникли некоторые недопонимания с моей стороны в плане изучения. Есть следующий...

Сериализация JSON
Привет! Прошу помощи, не могу понять, как собрать Json обратно. В общем изначально я получаю данные в таком виде: { ...

Сериализация JSON
Здравствуйте! Допустим есть класс: public class Point2D { public double X, Y; private PluginStart Shell; public...

Сериализация в JSON
Добрый день. Прошерстил доки по сериализации JSON, нагугли несколько библиотек, но так и не смог сериализовать свою структуру. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru