Я пытаюсь преобразовать 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 не знал для обработки {} маркеров тот же путь как 'пустой указатель' при десериализации.
Спасибо все для Вашего входа!
Ошибка говорит вам, что он не может найти конструктор, который он может использовать для десериализации.
Попробуйте добавить конструктор по умолчанию в класс:
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, что вы пытаетесь десерифицировать?
Я не знаю, правильный ответ или нет, но, по крайней мере, вы можете создать пользовательский конвертер для Nullable<>, это очень помогает мне с DataRow сериализации / дериализации он также не имеет конструктора по умолчанию. Вот пример