读取 json 时出现异常无法将 Newtonsoft.Json.Linq.JObject 转换为 Newtonsoft.Json.Linq.JToken

问题描述 投票:0回答:2

我有以下 JSON:

"printers": {
  "default": "Kyocera ECOSYS M6230cidn KX",
  "userMappings": [
    {
      "user": "050327",
      "printer": "SG Fanelli"
    },
    {
      "user": "050139",
      "printer": "SGPB"
    },
    {
      "user": "050115",
      "printer": "SG Holenstein"
    }
  ]
}

为了反序列化,我创建了以下类:

public class PrintersDto {
    public string Default { get; set; }
    public IEnumerable<UserPrinterDto> UserMappings { get; set; } = new List<UserPrinterDto>();
}

public class UserPrinterDto {
    public string User { get; set; }
    public string Printer { get; set; }
}

这是我的加载逻辑

public PrintersDto GetPrintersConfig() {
    using (var configFileStream = FileIoService.ReadFile(ConfigFilePath)) {
        using (var reader = new StreamReader(configFileStream)) {
            var jsonString = reader.ReadToEnd();
            _configData = (JObject) JsonConvert.DeserializeObject(jsonString);

            var jtoken = _configData.SelectToken("printers");
            return jtoken.Value<PrintersDto>();
        }
    }
}

当我执行此操作时,我收到异常

无法将 Newtonsoft.Json.Linq.JObject 转换为 Newtonsoft.Json.Linq.JToken

jtoken.Value<PrintersDto>();

有人可以帮助我,为什么会发生这种情况以及我该如何解决这个问题?

c# json linq
2个回答
4
投票

使用您的课程可以获得数据

return JObject.Parse(jsonString)["printers"].ToObject<PrintersDto>();

0
投票

更换

var jtoken = _configData.SelectToken("printers");
return jtoken.Value<PrintersDto>(); 

return _configData.SelectToken("printers").ToObject<PrintersDto>();
© www.soinside.com 2019 - 2024. All rights reserved.