Json.NET, Неспособный десериализовывать nullable тип

Я пытаюсь преобразовать JSON в объект C# использование Json.NET. Объект похож на это в C#:

public class MyObject 
{
   public int? integerValue {get;set;}
   public DateTime? dateTimeValue {get;set;}
}

Но когда я работаю JsonConvert.DeserializeObject() на поступлении JSON я получаю следующее Исключение:

Неспособный найти, что конструктор использует для системы типов. Nullable '1 [Система. Int32]. Класс должен или иметь конструктора по умолчанию или только одного конструктора с аргументами.

---РЕДАКТИРОВАНИЕ----

Хорошо оказывается, что после выполнения многих тестов, проблема сводится к тому моему входу для моего JSON, был похож на это:

{integerValue:{}, dateTimeValue: {} }

вместо:

{integerValue: null, dateTimeValue: null}

Оказывается, что {} допустимый способ представить несуществующий объект в JSON, но синтаксический анализатор JSON.Net не знал для обработки {} маркеров тот же путь как 'пустой указатель' при десериализации.

Спасибо все для Вашего входа!

20
задан 7wp 28 January 2010 в 22:38
поделиться

2 ответа

Ошибка говорит вам, что он не может найти конструктор, который он может использовать для десериализации.

Попробуйте добавить конструктор по умолчанию в класс:

public class MyObject
    {
        public int? integerValue { get; set; }
        public DateTime? dateTimeValue { get; set; }

        public MyObject(){}
    } 

Патрик.

- Редактировать -

Итак, я только что создал простое приложение консоли, используя MyObject, с конструктором по умолчанию, и я не получаю ошибок. Вот мой пример:

   class Program
    {
        static void Main(string[] args)
        {
            var mo = new MyObject { integerValue = null, dateTimeValue = null };
            var ser = Newtonsoft.Json.JsonConvert.SerializeObject(mo);
            var deser = Newtonsoft.Json.JsonConvert.DeserializeObject(ser, typeof(MyObject));
        }
    }

    public class MyObject
    {
        public int? integerValue { get; set; }
        public DateTime? dateTimeValue { get; set; }        
    }  

Я не получаю исключения ...

Можете ли вы показать пример JSON, что вы пытаетесь десерифицировать?

15
ответ дан 30 November 2019 в 00:39
поделиться

Я не знаю, правильный ответ или нет, но, по крайней мере, вы можете создать пользовательский конвертер для Nullable<>, это очень помогает мне с DataRow сериализации / дериализации он также не имеет конструктора по умолчанию. Вот пример

3
ответ дан 30 November 2019 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: