如何用newtonsoft反序列化json数组?
这是我的json文件:
{
"one": [
{
"one":"1",
"two":"2",
"three":"3"
},
{
"one":"1",
"two":"2",
"three":"3"
}
],
"two": [
{
"one":"1",
"two":"2",
"three":"3"
}
]
}
这是我的代码:
myList= JsonConvert.DeserializeObject <List<MyClass>>(jsonFile);
public class MyClass
{
public string one{ get; set; }
public string two { get; set; }
public string three { get; set; }
}
也许我需要以某种方式改变我的json文件?
答案 0 :(得分:1)
您的课程需要与您的JSON结构相匹配。它应该是这样的:
public class Foo
{
[JsonProperty("one")]
public string One { get; set; }
[JsonProperty("two")]
public string Two { get; set; }
[JsonProperty("three")]
public string Three { get; set; }
}
public class RootObject
{
[JsonProperty("one")]
public List<Foo> One { get; set; }
[JsonProperty("two")]
public List<Foo> Two { get; set; }
}
现在它将正确反序列化:
Console.WriteLine(JsonConvert.DeserializeObject<RootObject>(json));
答案 1 :(得分:0)
这不是JSON数组,它是一个具有两个数组属性的对象。
public class YourClass
{
public string one { get; set; }
public string two { get; set; }
public string three { get; set; }
}
public class RootObject
{
public List<YourClass> one { get; set; }
public List<YourClass> two { get; set; }
}
(不,我们仍然对此有一个规范性问题?每天都一样......)
答案 2 :(得分:0)
如果你想保留你的类结构,你必须将你的json文件更改为:
[
{
"one":"1",
"two":"2",
"three":"3"
},
{
"one":"1",
"two":"2",
"three":"3"
}
]
使用此json文件样式进行反序列化
myList= JsonConvert.DeserializeObject <List<MyClass>>(jsonFile);
将正确完成。
上面的json文件中有两个数组。因此,反序列化将失败。
答案 3 :(得分:0)
试试这个:
`public class Foo
{
[JsonProperty("one")]
public string One { get; set; }
[JsonProperty("two")]
public string Two { get; set; }
[JsonProperty("three")]
public string Three { get; set; }
}
public class RootObject
{
[JsonProperty("one")]
public List<Foo> One { get; set; }
[JsonProperty("two")]
public List<Foo> Two { get; set; }
}`
并反序列化对象使用
` RootObject _rootObject = JsonConvert.DeserializeObject<RootObject>
(jObject.ToString());`
答案 4 :(得分:0)
您应该将其反序列化为Dictionary<string, MyClass[]>
var test = "{ \"one\": [ { \"one\":\"1\", \"two\":\"2\", \"three\":\"3\" }, { \"one\":\"1\", \"two\":\"2\", \"three\":\"3\" } ], \"two\": [ { \"one\":\"1\", \"two\":\"2\", \"three\":\"3\" } ] }";
var testar = JsonConvert.DeserializeObject <Dictionary<string, MyClass[]>>(test);
如果有更多的键添加,如Forth,Fifth等,这将开箱即用。