“无法将当前JSON对象反序列化为类型

时间:2019-06-07 07:01:10

标签: c# json deserialization

所以我有以下任务-我需要反序列化存储在应用程序的资源文件夹中的Jason对象数组。

到目前为止,我已经访问了资源并将其存储到var中:

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 个答案:

答案 0 :(得分:2)

是否有不想创建代表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);

答案 1 :(得分:0)

您的通用类型为List<Dictionary<string, double>>的架构与json的架构不匹配。如果要转换为List<Dictionary,则不能使用"samples": [。为此,您需要Dictionary<string,List<Dictionary。 同样,当您尝试使用double时,日期也不会解析为两倍。因此,也许您可​​以尝试Dictionary<string, List<Dictionary<string, object>>>。理想情况下,您应该为此结构创建类,而不要使用通用的List,Dictionary结构。如果您使用的是Visual Studio,则可以通过使用Edit-> Paste special->粘贴json作为类来创建这些类