1. Гость - предлагаем Вам : Мощные Выделенные Серверы 16-24 ядра / Lan 1Gbps - для XRumer, ZennoPoster, GSA, и другого сео-софта от 80 usd/месяц, для уточнения деталей воспользуйтесь формой обратной связи, или напишите Администратору форума в ЛС. ICQ:698-329-725

C-Sharp (C#) Сериализация, и десериализация json c#

Тема в разделе "Разработка приложений C# .Net Скрипты библиотеки .", создана пользователем Vitalino Grom, 29 июл 2018.

  1. Vitalino Grom

    Vitalino Grom Новичёк

    Регистрация:
    23 июл 2018
    Сообщения:
    2
    Симпатии:
    0
    Столкнулся с проблемой сериализации, и десериализации Json вложенной структуры класса MyClass.
    Код (C#):
    1. class MyClass
    2. {
    3.     public string Name { get; set; }
    4.     public int Number { get; set; }
    5.     public bool Work { get; set; }
    6.     public List<int> Id = new List<int>();
    7.     public Book Books = new Book();
    8.     public class Book
    9.     {
    10.         public int Old { get; set; }
    11.         public bool New { get; set; }
    12.         public bool Read { get; set; }
    13.         public Book() { }
    14.     }
    15. }
    Помогите с реализацией сериализации, и десериализации Json.
     
  2. Prime

    Prime Administrator
    Команда форума

    Регистрация:
    8 янв 2016
    Сообщения:
    2.516
    Симпатии:
    1.311
    Для сериализации контрактов данных необходимо в MyClass добавить атрибуты [DataContract] для типов, [DataMember] для полей, и свойств.

    Код (C#):
    1. [DataContract]
    2. class MyClass
    3. {
    4.     [DataMember]
    5.     public string Name { get; set; }
    6.     [DataMember]
    7.     public int Number { get; set; }
    8.     [DataMember]
    9.     public bool Work { get; set; }
    10.     [DataMember]
    11.     public List<int> Id = new List<int>();
    12.     [DataMember]
    13.     public Book Books = new Book();
    14.     [DataContract]
    15.     public class Book
    16.     {
    17.         [DataMember]
    18.         public int Old { get; set; }
    19.         [DataMember]
    20.         public bool New { get; set; }
    21.         [DataMember]
    22.         public bool Read { get; set; }
    23.         public Book() { }
    24.     }
    25. }
    Для для сериализации, и десериализации напишем класс JsonHelper, с двумя статичными методами Serialize, и Deserialize.

    Код (C#):
    1. class JsonHelper
    2. {
    3.     public static void Serialize(object json, string file)
    4.     {
    5.         DataContractJsonSerializer jsonFormatter = new DataContractJsonSerializer(typeof(MyClass[]));
    6.  
    7.         using (FileStream fs = new FileStream(file, FileMode.OpenOrCreate))
    8.         {
    9.             jsonFormatter.WriteObject(fs, json);
    10.         }
    11.     }
    12.     public static MyClass[] Deserialize(string file)
    13.     {
    14.         DataContractJsonSerializer jsonFormatter = new DataContractJsonSerializer(typeof(MyClass[]));
    15.         using (FileStream fs = new FileStream(file, FileMode.Open))
    16.         {
    17.             return (MyClass[])jsonFormatter.ReadObject(fs);
    18.         }
    19.     }
    20. }
    Сериализация:

    Код (C#):
    1. var myClass = new MyClass();
    2. myClass.Name = "Jovi";
    3. myClass.Number = 10;
    4. myClass.Work = true;
    5. myClass.Id.AddRange(new[] { 1, 3, 6, 9 });
    6. myClass.Books.New = true;
    7. myClass.Books.Old = 2;
    8. myClass.Books.Read = false;
    9. var obj = new[] { myClass };
    10. JsonHelper.Serialize(obj, "myTest.json");
    Результат Json:
    Код (JSON):
    1. [{
    2.     "Books": {
    3.         "New": true,
    4.         "Old": 2,
    5.         "Read": false
    6.     },
    7.     "Id": [1, 3, 6, 9],
    8.     "Name": "Jovi",
    9.     "Number": 10,
    10.     "Work": true
    11. }]
    Десериализация:

    Код (C#):
    1. var obj = JsonHelper.Deserialize("myTest.json");
     
    Vitalino Grom нравится это.
  3. Vitalino Grom

    Vitalino Grom Новичёк

    Регистрация:
    23 июл 2018
    Сообщения:
    2
    Симпатии:
    0
    Спасибо вы мой спаситель всё получилось, два дня мучался казалось перепробовал всё, оказалось всё сложнее чем я предполагал.
     

Поделиться этой страницей