Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.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.net - Fatal编程技术网

C# Newtonsoft JSON反序列化具有不同对象类型的数组

C# Newtonsoft JSON反序列化具有不同对象类型的数组,c#,json.net,C#,Json.net,我试图以最有效的方式反序列化json数组中的不同对象类型,但我看不出如何以任何简单的方式实现这一点。我正在使用Newtonsoft.Json库进行解析 我已经建立了一个简单的例子来说明我试图解决的问题,我希望绑定到的类和我正在使用的JSON格式定义如下: class Car { public int Wheels { get; set; } public String Manufacturer { get; set; } public String Colour { ge

我试图以最有效的方式反序列化json数组中的不同对象类型,但我看不出如何以任何简单的方式实现这一点。我正在使用Newtonsoft.Json库进行解析

我已经建立了一个简单的例子来说明我试图解决的问题,我希望绑定到的类和我正在使用的JSON格式定义如下:

class Car
{
    public int Wheels { get; set; }
    public String Manufacturer { get; set; }
    public String Colour { get; set; }
    public double EngineSize { get; set; }
    public String Year { get; set; }
}

class Aeroplane
{
    public String Model { get; set; }
    public String Airline { get; set; }
    public int JourneyCount { get; set; }
}

class Ship
{
    public String Name { get; set; }
    public String Company { get; set; }
    public int Capacity { get; set; }
    public String YearBuilt { get; set; }
}
下面是我试图绑定到这些类的JSON。它被设置为一个数组,每个位置有三种不同的嵌套对象类型。基本上,数组中的每个元素/索引都包含三个对象,即汽车、飞机和轮船

{[
  {
    "car": {
      "wheels": 4,
      "manufacturer": BMW,
      "colour": "Black",
      "engineSize": "1.6"
    },
    "aeroplane": null,
    "ship": null
  },
  {
    "car": {
      "wheels": 4,
      "manufacturer": BMW,
      "colour": "Black",
      "engineSize": "1.6"
    },
    "aeroplane": {
        "model": "Dreamliner",
        "airline": "Emirates",
        "journeyCount": 4798
    },
    "ship": {
        "name":"Queen Mary",
        "company":"Cunard",
        "capacity": 890,
        "yearBuilt": 2000
    }
  },
  {
    "car": {
      "wheels": 4,
      "manufacturer": BMW,
      "colour": "Black",
      "engineSize": "1.6"
    },
    "aeroplane": {
        "model": "Boeing 777",
        "airline": "BA",
        "journeyCount": 6158
    },
    "ship": {
        "name":"HMS Diamond",
        "company":"Royal Navy",
        "capacity": 500,
        "yearBuilt": 2010
    }
  }
]}

首先,您的json无效。为了使它有效,你需要去掉上面的花括号。还有一些遗漏的引语。您可以使用来验证它。应该是这样的:

[
    {
        "car": {
            "wheels": 4,
            "manufacturer": "BMW",
            "colour": "Black",
            "engineSize": "1.6"
        },
        "aeroplane": null,
        "ship": null
    },
    {
        "car": {
            "wheels": 4,
            "manufacturer": "BMW",
            "colour": "Black",
            "engineSize": "1.6"
        },
        "aeroplane": {
            "model": "Dreamliner",
            "airline": "Emirates",
            "journeyCount": 4798
        },
        "ship": {
            "name": "Queen Mary",
            "company": "Cunard",
            "capacity": 890,
            "yearBuilt": 2000
        }
    },
    {
        "car": {
            "wheels": 4,
            "manufacturer": "BMW",
            "colour": "Black",
            "engineSize": "1.6"
        },
        "aeroplane": {
            "model": "Boeing 777",
            "airline": "BA",
            "journeyCount": 6158
        },
        "ship": {
            "name": "HMS Diamond",
            "company": "Royal Navy",
            "capacity": 500,
            "yearBuilt": 2010
        }
    }
]
你还需要一节课来包装汽车、飞机和轮船:

public class VehicleWrapper
{
    public Car Car { get; set; }

    public Aeroplane Aeroplane { get; set; }

    public Ship ship { get; set; }
}
现在可以使用以下行对其进行反序列化:

List<VehicleWrapper> vehicles = JsonConvert.DeserializeObject<List<VehicleWrapper>>(jsonString);
List vehicles=JsonConvert.DeserializeObject(jsonString);

首先,您的json无效。为了使它有效,你需要去掉上面的花括号。还有一些遗漏的引语。您可以使用来验证它。应该是这样的:

[
    {
        "car": {
            "wheels": 4,
            "manufacturer": "BMW",
            "colour": "Black",
            "engineSize": "1.6"
        },
        "aeroplane": null,
        "ship": null
    },
    {
        "car": {
            "wheels": 4,
            "manufacturer": "BMW",
            "colour": "Black",
            "engineSize": "1.6"
        },
        "aeroplane": {
            "model": "Dreamliner",
            "airline": "Emirates",
            "journeyCount": 4798
        },
        "ship": {
            "name": "Queen Mary",
            "company": "Cunard",
            "capacity": 890,
            "yearBuilt": 2000
        }
    },
    {
        "car": {
            "wheels": 4,
            "manufacturer": "BMW",
            "colour": "Black",
            "engineSize": "1.6"
        },
        "aeroplane": {
            "model": "Boeing 777",
            "airline": "BA",
            "journeyCount": 6158
        },
        "ship": {
            "name": "HMS Diamond",
            "company": "Royal Navy",
            "capacity": 500,
            "yearBuilt": 2010
        }
    }
]
你还需要一节课来包装汽车、飞机和轮船:

public class VehicleWrapper
{
    public Car Car { get; set; }

    public Aeroplane Aeroplane { get; set; }

    public Ship ship { get; set; }
}
现在可以使用以下行对其进行反序列化:

List<VehicleWrapper> vehicles = JsonConvert.DeserializeObject<List<VehicleWrapper>>(jsonString);
List vehicles=JsonConvert.DeserializeObject(jsonString);

是的,我刚刚意识到我粘贴了一份旧的JSON副本,表示歉意,并很好地识别了它。谢谢,我会试试的。不需要谢谢,如果它解决了你的问题,就把它标记为答案。是的,我刚刚意识到我粘贴了一份JSON的旧副本,道歉,还有很好的发现。谢谢,我会试试的。不用谢,如果它解决了你的问题,就把它标记为答案。