使用c#中的JsonConvert.DeserializeObject反序列化合法的json文件返回null

3
我可以帮您翻译成中文。以下是需要翻译的内容:

我有以下函数:

[HttpPost]
[Route("api/post")]
public void AddFavourite([FromBody]int id) {

    var data = GetData(id);
    var list = JsonConvert.DeserializeObject<List<VehicleDetail>>(@"C:\FleetStudio\favVehicle.json");
    list.Add(data);
    var convertedJson = JsonConvert.SerializeObject(list, Formatting.Indented);
 }

我的列表为空,但是返回以下错误:

Newtonsoft.Json.JsonReaderException:解析值时遇到意外字符:C。路径“”,第0行,第0个位置。

我的data.json文件如下(在https://jsonlint.com/上通过了测试)

[
  {
    "Name": "mocksson",
    "Id": 32,
    "Alarm": null,
    "Signalinfo": null,
    "Position": null
  }
]

我的VehicleDetail类如下所示:

 public class VehicleDetailsClass
    {
        public string Name { get; set; }
        public int Id { get; set; }
        public List<Alarms> Alarm { get; set; }
        public List<SignalInfo> Signalinfo { get; set; }
        public Position Position { get; set; }
    }

我完全看不出这个列表怎么可能为空。这行代码并没有什么特别之处,但它仍然导致了崩溃。有人能看出哪里出了问题吗?


1
JsonConvert不会读取文件,它试图对你的路径进行反序列化,而路径本身并不是json格式的。 - Lasse V. Karlsen
在字段上使用[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]可能会有所帮助... - Yousha Aleayoub
1个回答

3
使用 File.ReadAllText 方法读取磁盘上的文件中的 jsonData,然后将其作为参数传递到 JsonConvert.DeserializeObject 方法中。 JsonConvert.DeserializeObject 方法解析 json 字符串而非文件路径。
 string jsonDATA = File.ReadAllText(@"C:\FleetStudio\favVehicle.json")
 var list = JsonConvert.DeserializeObject<List<VehicleDetail>>(jsonDATA);

它起了作用。我还添加了以下代码:File.WriteAllText(@“C:\ FleetStudio \ favVehicle.json”,convertedJson);,现在也将结果写入我的.json文件中。非常感谢您的帮助D-Shih。 - maac
谢谢 :) 很高兴能帮助 @maac - D-Shih

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接