Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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# 使用json.NET反序列化json时引发异常_C#_Json_Json.net - Fatal编程技术网

C# 使用json.NET反序列化json时引发异常

C# 使用json.NET反序列化json时引发异常,c#,json,json.net,C#,Json,Json.net,我有以下课程 public class Airport { [MaxLength(75)] public string Name { get; set; } public bool NotInUse { get; set; } [MaxLength(50)] public string City { get; set; } [MaxLength(50)] public string Country { get; set; }

我有以下课程

public class Airport
{
    [MaxLength(75)]
    public string Name { get; set; }

    public bool NotInUse { get; set; }

    [MaxLength(50)]
    public string City { get; set; }

    [MaxLength(50)]
    public string Country { get; set; }

    [MaxLength(2)]
    public string Iso { get; set; }

    [MaxLength(3)]
    public string Iata { get; set; }

    [MaxLength(4)]
    public string Icao { get; set; }
}
我有以下json文件-并非所有属性都在json文件中

    {
  "Airports":{
  [
    {
       "Name": "Belfast International",
       "City": "Belfast",
       "Country": "United Kingdom",
       "Iso": "GB",
       "Iata": "BFS"
     },
     {
       "Name": "City of Derry",
       "City": "Derry",
       "Country": "United Kingdom",
       "Iso": "GB",
       "Iata": "LDY"

     }
    ]
  }
}
我试图用这个方法反序列化json

public IList<Airport> ReadAirportsFromJson()
{
    if (File.Exists(AirportJsonFilename))
    {
        string fileContents = File.ReadAllText(AirportJsonFilename);
        var airports = JsonConvert.DeserializeObject<List<Airport>>(fileContents);
        return airports;
    }
    return null;
}
public IList ReadAirportsFromJson()
{
if(File.Exists(AirportJsonFilename))
{
字符串fileContents=File.ReadAllText(AirportJsonFilename);
var airports=JsonConvert.DeserializeObject(fileContents);
返回机场;
}
返回null;
}
我得到以下例外


我不确定如何处理此问题和解决此问题。

当您像在那里那样传入此文件时,您正在尝试将整个文件反序列化到机场列表中。如果整个文件碰巧也包含机场列表,那么这将不起作用。您要么只需要获取JSON的一部分(实际上是机场列表),要么需要创建一个类来表示整个JSON文件并反序列化到该文件中。从那以后,你只需转到
yourObject.Airports

json无效,我建议将其更改为类似的内容

{
  "Airports":
  [
    {
       "Name": "Belfast International",
       "City": "Belfast",
       "Country": "United Kingdom",
       "Iso": "GB",
       "Iata": "BFS"
     },
     {
       "Name": "City of Derry",
       "City": "Derry",
       "Country": "United Kingdom",
       "Iso": "GB",
       "Iata": "LDY"

     }
    ]
}
并创建一个包装器类

public class AirportsWrapper
{
    public List<Airport> Airports { get; set; }
}

演示:

您列出的JSON不完全有效。您可以使用以下工具验证它并查看错误,如。但是,如果
“Airports”
应该是一个数组,或者缺少一个用于组合对象和数组的键,那么它似乎有一个额外的对象,
{…}
。您从哪里获取JSON?你能换一下吗?通过使用
List
属性创建一个类,您几乎可以让它工作,但即使如此,该值还是一个直接包含数组的对象,我认为它不是有效的JSON。JSON确实是无效的!您可以自己检查,将json放在json中是我创建的。我试图做的是使用硬编码的json文件为我的应用程序创建一些默认数据,一些数据用于获取信息started@JDibble你能改变json格式吗?
public IList<Airport> ReadAirportsFromJson()
{
    if (File.Exists(AirportJsonFilename))
    {
        string fileContents = File.ReadAllText(AirportJsonFilename);
        var airportsWrapper = JsonConvert.DeserializeObject<AirportsWrapper>(fileContents);
        if (airportsWrapper != null)
        {
            return airportsWrapper.Airports;
        }
    }
    return null;
}