坚持反序列化问题需要帮助将JSON文件转换为数据数组。我无法弄清楚如何将其反序列化为此对象的字典。
我的JSON在文件中采用这种格式 - 它是数千行,这只是一个示例:
[
{
"movies": [
"A",
"B",
"C",
"D",
"E"
]
},
{
"movies": [
"A"
]
},
{
"movies": [
"C",
"D"
]
}
]
到目前为止,我理解JSON结构,我的C#类是
public class Rootobject
{
public Class1[] Property1 { get; set; }
}
public class Class1
{
public string[] movies { get; set; }
}
var json = "";
// MyObject o;
using (FileStream s = File.Open(@"D:\test.json", FileMode.Open))
using (StreamReader sr = new StreamReader(s))
{
json = sr.ReadToEnd();
}
var tmp = JsonConvert.DeserializeObject<Rootobject>(json);
无法获得DeserializeObject
您发布的代码的问题是您的JSON对象实际上是一个数组(请注意它是如何从[
开始并以]
结尾),但您的代码正在尝试将其反序列化为单个Rootobject
,它与您的JSON结构不匹配。
你需要反序列化为Class1[]
,表明它是一个数组。
var tmp = JsonConvert.DeserializeObject<Class1[]>(json);
你也在问如何将它变成Dictionary
类型,但为此你需要一个关键值来区分它们。您的传入格式对此没有任何意义。您需要以下内容:
test.json
[
{
"key": "keyValue1",
"movies": [
"A",
"B",
"C",
"D",
"E"
]
},
{
"key": "keyValue2",
"movies": [
"A"
]
},
{
"key": "keyValue3",
"movies": [
"C",
"D"
]
}
]
阶级结构
public class Class1
{
public string key { get; set; }
public string[] movies { get; set; }
}
反序列化
var json = "";
// MyObject o;
using (FileStream s = File.Open(@"D:\test.json", FileMode.Open))
using (StreamReader sr = new StreamReader(s))
{
json = sr.ReadToEnd();
}
var tmp = JsonConvert.DeserializeObject<Rootobject[]>(json);
// don't forget to add using System.Linq;
var dictionary = tmp.ToDictionary<string, string[]>(o => o.key, o => o.movies);
只有这个班级
public class Class1
{
public string[] movies { get; set; }
}
你能试试吗?
var tmp = JsonConvert.DeserializeObject<IEnumerable<Class1>>(json);