Сериализация и десериализация datetime с помощью newtonsoft - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть класс, который содержит ocject DateTime.

public class Refuel 
{
    public DateTime DateTime { get; set; }
    public string Litre { get; set; }
}

При десериализации моего текстового файла я получаю сообщение об ошибке.

Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[OD_TankApp.Models.Refueling]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
Path 'DateTime', line 1, position 12.

Я уже пытался с настройками Json, ноэто не помогло.

JsonSerializerSettings settings = new JsonSerializerSettings { DateFormatHandling = DateFormatHandling.MicrosoftDateFormat};

это строка json:

"{\"DateTime\":\"2019-02-28T16:21:06.36845+01:00\",\"Litre\":\"23\"}}"

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Вы пытаетесь десериализовать строку json, которая представляет отдельный объект, в список / массив объектов, которые не будут работать.Либо десериализовать его в один объект, подобный этому:

var obj = JsonConvert.DeserializeObject<Refuel>(json);

, либо изменить строку json, чтобы она содержала список объектов:

"[{\" DateTime \ ": \"2019-02-28T16: 21: 06.36845 + 01: 00 \", \ "Liter \": \ "23 \"}] "

Теперь вы можете десериализовать его так:

var objArray = JsonConvert.DeserializeObject<Refuel[]>(json);
0 голосов
/ 28 февраля 2019

Если вы хотите десериализовать массив, вам нужно его защитить ([])

JsonConvert.DeserializeObject<Refuel[]>(json);
...