Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Newtonsoft.JSON和C从JSON获取数据_C#_Json.net - Fatal编程技术网

C# 使用Newtonsoft.JSON和C从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": {

以下是我的json数据文件内容:

{
    "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能把他的东西解释成字典,我会感到惊讶。此外,一旦它达到最后两个不是汽车的属性,它就会失败