C# 使用Newtonsoft.JSON和C从JSON获取数据
以下是我的json数据文件内容:C# 使用Newtonsoft.JSON和C从JSON获取数据,c#,json.net,C#,Json.net,以下是我的json数据文件内容: { "mercedes": { "model" : "GLS 350 d 4MATIC", "code" : "MB-GLS", "year": 2015 }, "bmw": { "model" : "BMW 420d Cabrio", "code" : "BM-420D", "year": 2017 }, "audi": {
{
"mercedes": {
"model" : "GLS 350 d 4MATIC",
"code" : "MB-GLS",
"year": 2015
},
"bmw": {
"model" : "BMW 420d Cabrio",
"code" : "BM-420D",
"year": 2017
},
"audi": {
"model" : "A5 Sportback 2.0 TDI quattro",
"code" : "AU-A5",
"year": 2018
},
"tesla": {
"model" : "Model S",
"code" : "TS-MOS",
"year": 2016
},
"test_drive": 0,
"path": "D:\\Mizz\\cars\\"
}
首先,我的json结构正确吗?然后,我想以列表的形式获取模型属性。但我对此一无所知。您需要为汽车结构创建一个具有型号、代码和年份属性的类:
public class Car {
public string model;
public string code;
public string year;
}
然后,使用JsonConvert,您可以像下面这样使用反序列化字符串json方法:
var cars = JsonConvert.Deserialize<Dictionary<string, Car>>(json);
附言:我是在一个原始文本编辑器中写的,它可能不是正确的语法,但你明白了。这也适用于其他几种语言。您需要为汽车结构创建一个具有型号、代码和年份属性的类:
public class Car {
public string model;
public string code;
public string year;
}
然后,使用JsonConvert,您可以像下面这样使用反序列化字符串json方法:
var cars = JsonConvert.Deserialize<Dictionary<string, Car>>(json);
附言:我是在一个原始文本编辑器中写的,它可能不是正确的语法,但你明白了。这也适用于其他几种语言。如果您可以更改数据结构,这将是理想的选择。您现在拥有的一个将无法很好地扩展
{
"vehicles": [
{
"mfgr": "mercedes",
"model" : "GLS 350 d 4MATIC",
"code" : "MB-GLS",
"year": 2015
},
{
"mfgr": "bmw",
"model" : "BMW 420d Cabrio",
"code" : "BM-420D",
"year": 2017
},
{
"mfgr": "audi",
"model" : "A5 Sportback 2.0 TDI quattro",
"code" : "AU-A5",
"year": 2018
},
{
"mfgr": "tesla",
"model" : "Model S",
"code" : "TS-MOS",
"year": 2016
}
],
"testDrive": 0,
"path": "D:\\Mizz\\cars\\"
}
然后你需要用C语言来建立一个汽车模型
public class Car
{
public string Mfgr { get; set; }
public string Model { get; set; }
public string Code { get; set; }
public int Year { get; set; }
}
以及外部对象类型
public class MyOuterType
{
public List<Car> Vehicles { get; set; }
public int TestDrive { get; set; }
public string Path { get; set; }
}
然后可以使用JsonConvert.DeserializetheJson;获取您的对象。如果您可以更改数据结构,那将是理想的选择。您现在拥有的一个将无法很好地扩展
{
"vehicles": [
{
"mfgr": "mercedes",
"model" : "GLS 350 d 4MATIC",
"code" : "MB-GLS",
"year": 2015
},
{
"mfgr": "bmw",
"model" : "BMW 420d Cabrio",
"code" : "BM-420D",
"year": 2017
},
{
"mfgr": "audi",
"model" : "A5 Sportback 2.0 TDI quattro",
"code" : "AU-A5",
"year": 2018
},
{
"mfgr": "tesla",
"model" : "Model S",
"code" : "TS-MOS",
"year": 2016
}
],
"testDrive": 0,
"path": "D:\\Mizz\\cars\\"
}
然后你需要用C语言来建立一个汽车模型
public class Car
{
public string Mfgr { get; set; }
public string Model { get; set; }
public string Code { get; set; }
public int Year { get; set; }
}
以及外部对象类型
public class MyOuterType
{
public List<Car> Vehicles { get; set; }
public int TestDrive { get; set; }
public string Path { get; set; }
}
然后可以使用JsonConvert.DeserializetheJson;获取您的对象。您知道您需要一个表示此JSON对象的类,不是吗?这就是你需要开始的地方@RomeoSierra:这实际上不是最好的方法,因为他希望列表中有不同的属性,而不是静态模型。看起来你的根对象混合了固定属性test_drive和path,以及一组可变属性car name,其值具有固定模式。如果是这样,您可以使用[JsonTypedExtensionData]公共字典{get;set;}from。您的汽车类型列表可能应该位于数组中,而不是作为对象属性。从一个糟糕的json设计开始,会给你带来巨大的麻烦headaches@Habip你能改变数据结构吗?如果是这样,让我们从这里开始。您知道您需要一个表示这个JSON对象的类,不是吗?这就是你需要开始的地方@RomeoSierra:这实际上不是最好的方法,因为他希望列表中有不同的属性,而不是静态模型。看起来你的根对象混合了固定属性test_drive和path,以及一组可变属性car name,其值具有固定模式。如果是这样,您可以使用[JsonTypedExtensionData]公共字典{get;set;}from。您的汽车类型列表可能应该位于数组中,而不是作为对象属性。从一个糟糕的json设计开始,会给你带来巨大的麻烦headaches@Habip你能改变数据结构吗?如果是这样的话,让我们从这里开始这是正确的方法,但他没有一份汽车清单。在帮助编写反序列化步骤Dictionary之前,他的JSON结构可能应该更改。值将返回一个汽车列表。Keys将返回列表[奔驰、宝马、奥迪、特斯拉]。但是我同意一个更好的结构是正确的方法。字典是一个键值对的列表。。。他没有名单。如果newtosoft能把他的东西解释成字典,我会感到惊讶。此外,一旦它击中最后两个不是汽车的属性,这将失败。这是正确的方法,但他没有汽车列表。在帮助编写反序列化步骤Dictionary之前,他的JSON结构可能应该更改。值将返回一个汽车列表。Keys将返回列表[奔驰、宝马、奥迪、特斯拉]。但是我同意一个更好的结构是正确的方法。字典是一个键值对的列表。。。他没有名单。如果newtosoft能把他的东西解释成字典,我会感到惊讶。此外,一旦它达到最后两个不是汽车的属性,它就会失败