C# 反序列化包含另一个对象的json对象
我正在尝试反序列化此json文件:C# 反序列化包含另一个对象的json对象,c#,json,json.net,C#,Json,Json.net,我正在尝试反序列化此json文件: { "result": { "car1":{"lat":37.989728,"long":23.664633}, "car2":{"lat":38.008027,"long":23.774068} } } 我试过这样做: public static void parseJson(string data) { Result all = JsonConvert.DeserializeObject
{
"result":
{
"car1":{"lat":37.989728,"long":23.664633},
"car2":{"lat":38.008027,"long":23.774068}
}
}
我试过这样做:
public static void parseJson(string data)
{
Result all = JsonConvert.DeserializeObject<Result>(data);
}
public class Result
{
public Car Car { get; set; }
}
public class Car
{
public string lat { get; set; }
public string lon { get; set; }
}
class Result
{
[JsonProperty("result")]
public Dictionary<string, Car> Cars { get; set; }
}
class Car
{
public decimal Lat { get; set; }
public decimal Long { get; set; }
}
publicstaticvoidparsejson(字符串数据)
{
结果all=JsonConvert.DeserializeObject(数据);
}
公开课成绩
{
公共小汽车{get;set;}
}
公车
{
公共字符串lat{get;set;}
公共字符串lon{get;set;}
}
但是对象
all
保持为nullJSON中的对象有两个属性,car1
和car2
,因此要将其映射到的类(Result
)应该有这两个属性:
public class Result
{
public Car car1 { get; set; }
public Car car2 { get; set; }
}
下面是您的评论:
好的,但那两辆车就是一个例子。实际上,每次我获取json时,汽车的数量都会有所不同 在这种情况下,JSON必须更改以使用数组:
{
"result":
{
cars: [
{"lat":37.989728,"long":23.664633},
{"lat":38.008027,"long":23.774068}
]
}
}
然后我认为结果
类应该是:
public class Result
{
public List<Car> cars { get; set; }
}
(如果除了cars之外没有任何其他内容,您可能可以删除中间对象。)JSON中的对象有两个属性,
car1
和car2
,因此您要将其映射到的类(Result
)应该有这两个属性:
public class Result
{
public Car car1 { get; set; }
public Car car2 { get; set; }
}
下面是您的评论:
好的,但那两辆车就是一个例子。实际上,每次我获取json时,汽车的数量都会有所不同 在这种情况下,JSON必须更改以使用数组:
{
"result":
{
cars: [
{"lat":37.989728,"long":23.664633},
{"lat":38.008027,"long":23.774068}
]
}
}
然后我认为结果
类应该是:
public class Result
{
public List<Car> cars { get; set; }
}
(如果你除了汽车之外没有任何东西,你也许可以去掉中间对象。)参考下面的代码片段,希望它能帮助你
class WeapsCollection
{
public Dictionary<string, WeaponDetails> Weapons { get; set; }
}
class WeaponList
{
public WeaponDetails AEK { get; set; }
public WeaponDetails XM8 { get; set; }
}
class WeaponDetails
{
public string Name { get; set; }
public int Kills { get; set; }
public int Shots_Fired { get; set; }
public int Shots_Hit { get; set; }
}
class Program
{
static void Main(string[] args)
{
string json = @"
{
'weapons':
{
'aek':
{
'name':'AEK-971 Vintovka',
'kills':47,
'shots_fired':5406,
'shots_hit':858
},
'xm8':
{
'name':'XM8 Prototype',
'kills':133,
'shots_fired':10170,
'shots_hit':1790
},
}
}";
WeapsCollection weps = JsonConvert.DeserializeObject<WeapsCollection>(json);
Console.WriteLine(weps.Weapons.First().Value.Shots_Fired);
Console.ReadLine();
}
}
类武器集合
{
公共字典{get;set;}
}
阶级武器清单
{
公共武器详细信息AEK{get;set;}
公共武器详细信息XM8{get;set;}
}
阶级武器细节
{
公共字符串名称{get;set;}
公共int杀死{get;set;}
公共int Shots_Fired{get;set;}
公共int Shots_Hit{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
字符串json=@”
{
“武器”:
{
“aek”:
{
“名称”:“AEK-971 Vintovka”,
“杀死”:47,
“开枪”:5406,
“射门命中”:858
},
“xm8”:
{
“名称”:“XM8原型”,
"杀":133,,
“开枪”:10170,
“投篮命中”:1790
},
}
}";
WeapsCollection weps=JsonConvert.DeserializeObject(json);
Console.WriteLine(weps.weps.wearms.First().Value.Shots\u Fired);
Console.ReadLine();
}
}
参考下面的代码片段,希望它能帮助您
class WeapsCollection
{
public Dictionary<string, WeaponDetails> Weapons { get; set; }
}
class WeaponList
{
public WeaponDetails AEK { get; set; }
public WeaponDetails XM8 { get; set; }
}
class WeaponDetails
{
public string Name { get; set; }
public int Kills { get; set; }
public int Shots_Fired { get; set; }
public int Shots_Hit { get; set; }
}
class Program
{
static void Main(string[] args)
{
string json = @"
{
'weapons':
{
'aek':
{
'name':'AEK-971 Vintovka',
'kills':47,
'shots_fired':5406,
'shots_hit':858
},
'xm8':
{
'name':'XM8 Prototype',
'kills':133,
'shots_fired':10170,
'shots_hit':1790
},
}
}";
WeapsCollection weps = JsonConvert.DeserializeObject<WeapsCollection>(json);
Console.WriteLine(weps.Weapons.First().Value.Shots_Fired);
Console.ReadLine();
}
}
类武器集合
{
公共字典{get;set;}
}
阶级武器清单
{
公共武器详细信息AEK{get;set;}
公共武器详细信息XM8{get;set;}
}
阶级武器细节
{
公共字符串名称{get;set;}
公共int杀死{get;set;}
公共int Shots_Fired{get;set;}
公共int Shots_Hit{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
字符串json=@”
{
“武器”:
{
“aek”:
{
“名称”:“AEK-971 Vintovka”,
“杀死”:47,
“开枪”:5406,
“射门命中”:858
},
“xm8”:
{
“名称”:“XM8原型”,
"杀":133,,
“开枪”:10170,
“投篮命中”:1790
},
}
}";
WeapsCollection weps=JsonConvert.DeserializeObject(json);
Console.WriteLine(weps.weps.wearms.First().Value.Shots\u Fired);
Console.ReadLine();
}
}
如果您将类设置为这样,您可以获得所需的内容:
public static void parseJson(string data)
{
Result all = JsonConvert.DeserializeObject<Result>(data);
}
public class Result
{
public Car Car { get; set; }
}
public class Car
{
public string lat { get; set; }
public string lon { get; set; }
}
class Result
{
[JsonProperty("result")]
public Dictionary<string, Car> Cars { get; set; }
}
class Car
{
public decimal Lat { get; set; }
public decimal Long { get; set; }
}
如果您将课程设置为这样,您可以获得所需的内容:
public static void parseJson(string data)
{
Result all = JsonConvert.DeserializeObject<Result>(data);
}
public class Result
{
public Car Car { get; set; }
}
public class Car
{
public string lat { get; set; }
public string lon { get; set; }
}
class Result
{
[JsonProperty("result")]
public Dictionary<string, Car> Cars { get; set; }
}
class Car
{
public decimal Lat { get; set; }
public decimal Long { get; set; }
}
好的,但那两辆车就是一个例子。实际上,每次我获取json时,汽车的数量都会有所不同。如何管理它?@jayt.dev:在这种情况下,您需要JSON中的数组,而不是离散属性。我已经更新了答案。谢谢你的回答。但json是http请求对API的响应,因此我无法更改它。我必须弄清楚如何处理现有的格式。@jayt.dev:这是一个严重破坏的API。不幸的是,我认为您必须使用JSON.Net提供的原始JSON对象编写代码。几年前我就这么做了,但我不记得细节了。你不会自动映射到一个类,因为如果你不知道会有多少个
carX
属性,你就不能定义这个类。如果我创建另一个类坐标{lat{get set}lon{get set}},在Cars中有公共坐标coordinateOK,那么这两个Cars就是一个例子。实际上,每次我获取json时,汽车的数量都会有所不同。如何管理它?@jayt.dev:在这种情况下,您需要JSON中的数组,而不是离散属性。我已经更新了答案。谢谢你的回答。但json是http请求对API的响应,因此我无法更改它。我必须弄清楚如何处理现有的格式。@jayt.dev:这是一个严重破坏的API。不幸的是,我认为您必须使用JSON.Net提供的原始JSON对象编写代码。几年前我就这么做了,但我不记得细节了。你不会得到aut的