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;
}