【发布时间】:2020-12-28 03:25:26
【问题描述】:
我从 API 接收到一个 JSON 字符串,并希望将其反序列化为 C# 对象,但无法正确获取类。
我尝试使用http://json2csharp.com/ 创建类,但它无法解析 JSON,但https://jsonlint.com/ 表示 JSON 是有效的。
我也尝试过运行JsonClassGeneratorLib,但它说
无法将 Newtonsoft.Json.Linq.JValue 类型的对象转换为 Newtonsoft.Json.Linq.JObject
这似乎是一个问题,因为 JSON 包含在 [] 方括号中。我相信这是有效的,但会将它变成一个数组。我想我需要在班级的某个地方创建一个数组。
string Json = @"[""error"",{""code"":2,""msg"":""This API Key is invalid""}]";
var obj = JsonConvert.DeserializeObject<RootObject>(Json);
public class CodeMsg
{
[JsonProperty("code")]
public long Code { get; set; }
[JsonProperty("msg")]
public string Msg { get; set; }
}
public class Result
{
[JsonProperty("error")]
public string String { get; set; }
public CodeMsg cm { get; set; }
}
public class RootObject
{
public Result Result { get; set; }
}
我总是得到错误
无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型“ConsoleApp1.RootObject”,因为该类型需要 JSON 对象(例如 {"name":"value"})才能正确反序列化。 要修复此错误,请将 JSON 更改为 JSON 对象(例如 {"name":"value"})或将反序列化类型更改为数组或实现集合接口的类型(例如 ICollection、IList),例如
List<T>可以从 JSON 数组反序列化
【问题讨论】:
-
不能比引用错误消息更好:
change the deserialized type to an array or a type that implements a collection interface