Не получается Десериализовать файл json: string в DateTime
У меня есть вот такой Json файлик:
[
{
"Date": "1950",
"someEvent": "Cold world"
},
{
"Date": "1991-06-01",
"someEvent": "какое-то событие 2"
},
{
"Date": "2000-01-01",
"someEvent": "наступил миллениум, ура-ура-ура"
},
{
"Date": "2021",
"someEvent": "Still cold world"
}
]
Также помимо него в моей программе есть класс Event:
public class Event
{
public DateTime Date { get; set; }
public string description { get; set; }
}
Когда я пытаюсь сделать десериализацию:
public static Event[] JsonTimeline() // Считывает данные из файла с событиями
{
string str = File.ReadAllText(@"timeline.json");
Event[] time = JsonConvert.DeserializeObject<Event[]>(str);
return time;
}
Появляется ошибка, которая мне сообщает, что 1950, т.е string, нельзя привести к DateTime, хотя для другого класса, который тоже имеет DateTime свойство всё работает. В чём моя проблема?
Ответы (1 шт):
Попробуйте подправить класс :
public class Event
{
[JsonPropertyName("Date")]
public string Date { get; set; }
[JsonPropertyName("someEvent")]
public string SomeEvent { get; set; }
private DateTime GetDateTime() =>
DateTime.ParseExact(Date, "yyyy", CultureInfo.InvariantCulture);
}
Можете попробовать создать консольное приложение и конвертировать string "1950" в DateTime. Не думаю, что Convert.ToDateTime поможет.
Не знаю, как там точно под капотом десериализатора, но не думаю, что там вызов какого-то подобного метода. Обычными способами Convert.ToDateTime или подобными у вас вряд ли получится так просто конвертировать эту строку в дату.
https://json2csharp.com/ - вот ссылочка на полезный сайт, который может первое время помочь с созданием правильного класса. Конечно, на 200% на него надеяться не стоит, но как "помощник" стоит рассмотреть.
Без JsonPropertyName:
public class Event
{
public string Date { get; set; }
public string someEvent { get; set; }
private DateTime GetDateTime() =>
DateTime.ParseExact(Date, "yyyy", CultureInfo.InvariantCulture);
}
