我正在使用JSON.Net来反序列化JSON字符串。 JSON字符串是
string testJson = @"{
""Fruits"": {
""Apple"": {
""color"": ""red"",
""size"": ""round""
},
""Orange"": {
""Properties"": {
""color"": ""red"",
""size"": ""round""
}
}
}
}";
我的代码是
public class Fruits
{
public Apple apple { get; set; }
public Orange orange { get; set; }
}
public class Apple
{
public string color { get; set; }
public string size { get; set; }
}
public class Orange
{
public Properties properties { get; set; }
}
public class Properties
{
public string color { get; set; }
public string size { get; set; }
}
我正在尝试使用以下代码反序列化
Fruits result = JsonConvert.DeserializeObject<Fruits>(testJson);
我的结果中存在一个问题,水果与 Apple 和橙色有null
而不是属性,颜色,尺寸。
答案 0 :(得分:4)
假设您无法更改json,则需要创建一个具有FruitsWrapper
属性的新Fruits
类
public class FruitsWrapper
{
public Fruits Fruits { get; set; }
}
并将json反序列化为FruitsWrapper
的实例,而不是Fruits
FruitsWrapper result = JsonConvert.DeserializeObject<FruitsWrapper>(testJson);
答案 1 :(得分:2)
JSON字符串应为:
string testJson = @"{
""Apple"": {
""color"": ""red"",
""size"": ""round""},
""Orange"": {
""Properties"": {
""color"": ""red"",
""size"": ""round"" }
}
}";
用你的班级反序列化
答案 2 :(得分:2)
问题在于Json中最外面的护腕对应于您尝试反序列化的类型。
所以这个:
string testJson = @"{
""Fruits"": { ... }
}";
与水果相对应,因为那是你尝试反序列化的内容。
string testJson = @"{
""Fruits"": { ... }
^--+-^
|
+-- this is assumed to be a property of this --+
|
+------------------------+
|
v--+-v
Fruits result = JsonConvert.DeserializeObject<Fruits>(testJson);
但是,Fruits
类型没有名为Fruits
的属性,因此没有反序列化。
如果无法更改Json,则需要创建一个反序列化的容器类型,如下所示:
public class Container
{
public Fruits Fruits { get; set; }
}
然后你可以反序化:
Container result = JsonConvert.DeserializeObject<Container>(testJson);
答案 3 :(得分:0)
你的JSON字符串是不正确的(正如其他人指出的那样)但是我添加它以帮助你找到正确的格式。鉴于您有fruit
这样的对象:
var fruit = new Fruits
{
apple = new Apple { color = "red", size = "massive" },
orange = new Orange { properties = new Properties { color = "orange", size = "mediumish" } }
};
然后,您可以将其序列化为JSON:
var testJson = JsonConvert.SerializeObject(fruit);
现在您可以看到序列化输出将如下所示:(略有格式化)
{"apple":
{"color":"red","size":"massive"},
"orange":
{"properties":
{"color":"orange","size":"mediumish"}}}
这很容易反序列化回你的对象:
fruit = JsonConvert.DeserializeObject<Fruits>(testJson);