0 / 0 / 0
Регистрация: 01.04.2019
Сообщений: 6
1

Десериализация Newtonsoft.Json

22.05.2019, 15:28. Показов 5220. Ответов 6

Возникла жизненная необходимость сохранять текущее состояние с возможностью снова восстановиться к нему. В моём коде происходит сериализация объекта, чуть позже он должен быть десериализован обратно. Помимо прочих, классе есть поле с атрибутом [JsonIgnore]:
C#
1
2
3
4
5
6
7
public class MyClass 
{
         public int number;
         public bool flag;
         [JsonIgnore]
         public Action action;
 }
В другом месте должна произойти десериализация, но она не может произойти, потому что одно из полей было проигнорировано.
C#
1
var obj = JsonConvert.DeserializeObject<MyClass>(json);
Программа кидает соответствующее исключение.

Вопрос: как можно десериализовать объект, поставив в поле public Action action значение по умолчанию? Просто распарсить всё это руками?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2019, 15:28
Ответы с готовыми решениями:

Newtonsoft.Json JArray в JObject
Здравствуйте. Весь день бился, и гуглил, так ничего и не нашел. Никак не могу получить JObject из...

Newtonsoft.Json.JsonConvert Де-/Сериализация .NET и JS
Сериализовали мы допустим какой-то класс в .NET методом SerializeObject. Что мы получим в JS при...

Сереализация отдельных полей класса в NewtonSoft.Json
Добрый день коллеги! Есть несколько разных JSON пакетов с одинаковым именем ключа, но в для разных...

Cannot access child value on Newtonsoft.Json.Linq.JValue
добрый день может кто подскажет string pathToTxt = MyDocuments + &quot;SaleInsert.json&quot;; ...

6
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
22.05.2019, 15:44 2
1. Атрибут класса [DataContract]
2. Сериализовать и десериализовать лучше открытые свойства.
3. Атрибут для свойств [DataMember], игнорировать свойство - [IgnoreDataMember]
1
Эксперт JS
6341 / 3810 / 1957
Регистрация: 14.06.2018
Сообщений: 6,695
22.05.2019, 16:42 3
Здравствуйте.
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
using Newtonsoft.Json;
using System;
using System.IO;
 
namespace Question2457815
{
    public class MyClass
    {
        public int number;
        public bool flag;
        [JsonIgnore]
        public Action action;
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            var obj = new MyClass() { number = 123, flag = true, action = () => { Console.WriteLine("Hello, world!"); } };
 
            var o = new JsonSerializer();
            var sw = new StringWriter();
 
            o.Serialize(sw, obj);
            var str = sw.ToString();
            Console.WriteLine(str);
            var obj2 = (MyClass)o.Deserialize(new StringReader(str), typeof(MyClass));
            Console.WriteLine($"{obj2.number} {obj2.flag} {obj2.action}");
            Console.ReadKey();
        }
    }
}
1
843 / 82 / 7
Регистрация: 06.12.2009
Сообщений: 331
23.06.2021, 11:53 4
Товарищи, а можно ли при десериализации параметр, который передан как текст принимать в переменную числового типа и не ловить при этом ошибку?
Была ситуация, когда поставщик внезапно изменил у себя формат передачи и вместо 1781 начал передавать "1781". И у нас упал обмен данными. Как этого избежать?
0
1433 / 837 / 313
Регистрация: 17.05.2015
Сообщений: 3,215
24.06.2021, 10:13 5
diam, строго определить формат данных, как например, в в wcf или grpc.
Но если вы обмениваетесь, например, excel файлами, то никак, хотя бы оборачивать обработку в try-catch
0
843 / 82 / 7
Регистрация: 06.12.2009
Сообщений: 331
24.06.2021, 10:22 6
я сейчас говорил про настройки Newtonsoft.Json
0
781 / 567 / 204
Регистрация: 21.02.2019
Сообщений: 2,037
24.06.2021, 12:06 7
Цитата Сообщение от diam Посмотреть сообщение
я сейчас говорил про настройки Newtonsoft.Json
.. скорее всего, вам можно применить к такому свойству атрибут
[JsonConverter(typeof(YourConverter))]
.. который будет проверять тип свойства в приходящем JSON и конвертировать его в нужный тип (напр., string)
JSON Deserialization - String Is Automatically Converted To Int
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.06.2021, 12:06

Newtonsoft.Json как правильно задать атрибуты сериализации?
JSON: { &quot;id&quot;: &quot;42&quot;, &quot;name&quot;: &quot;СмыслВсего&quot;, &quot;descriptions&quot;: } ...

newtonsoft.json заполнение полей при десериализации своими значениями
Добрый день! Нужен совет. Есть класс для десериализации: class Order { ...

Десериализация JSON
Как для такого формата класс создать? , , ] исп. Newtonsoft.Json var myclass =...

Десериализация JSON
Есть данные от известного источника в JSON: {&quot;response&quot;:} При помощи Newtonsoft.Json они успешно...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.