"Невозможно десериализовать текущий объект JSON в тип - PullRequest
1 голос
/ 07 июня 2019

Итак, у меня есть следующая задача - мне нужно десериализовать массив объектов Jason, который хранится в папке ресурсов в моем приложении.

До сих пор я обращался к ресурсу и сохранял его в переменной:

var jsonData = Resources.SamplePoints;

Преобразовал массив в строку:

string jsonObjts = Encoding.Default.GetString(jsonData);

И попытались записать результат в список словарей

List<Dictionary<string, double>> EntityData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Dictionary<string, double>>>(jsonObjts);

Однако вышеприведенное сообщение об ошибке появляется при запуске и тестировании приложения.

Может кто-нибудь указать мне правильный путь, как это исправить?

Образец рассматриваемых объектов:

"samples": [
{
    "date": "2014-08-10T09:00:00Z",
    "temperature": 10,
    "pH": 4,
    "phosphate": 4,
    "chloride": 4,
    "nitrate": 10
},
{
    "date": "2014-08-12T09:05:00Z",
    "temperature": 10.5,
    "pH": 5,
    "chloride": 4,
    "phosphate": 4
},

Ответы [ 2 ]

2 голосов
/ 07 июня 2019

Есть ли причина, по которой вы не хотите создавать класс для представления вашего JSON?

public class Rootobject
{
    public List<Sample> Samples { get; set; }
}

public class Sample
{
    public DateTime Date { get; set; }
    public float Temperature { get; set; }
    public int Ph { get; set; }
    public int Phosphate { get; set; }
    public int Chloride { get; set; }
    public int Nitrate { get; set; }
}

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

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

Если вы все еще хотите использовать словарь, я думаю, вам нужно что-то вроде этого:

var obj = JsonConvert.DeserializeObject<Dictionary<string, List<Dictionary<string, object>>>>(json);
0 голосов
/ 07 июня 2019

Ваша схема общего типа List<Dictionary<string, double>> и схема json не совпадают.Если вы хотите привести к List<Dictionary, вы не можете использовать "samples": [. Для этого вам понадобится Dictionary<string,List<Dictionary.Также, когда вы пытаетесь использовать double, дата не будет анализироваться как удвоенная.Так что, может быть, вы можете попробовать Dictionary<string, List<Dictionary<string, object>>>.В идеале вы должны создать класс для этой структуры, а не использовать общий список, структуру словаря. Если вы используете Visual Studio, вы можете создавать эти классы, используя Edit-> Paste special-> paste json в качестве классов

...