所以我有以下任务-我需要反序列化存储在应用程序的资源文件夹中的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
},
答案 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作为类来创建这些类