无法反序列化当前 JSON 对象(例如 {“名称”:“值”})

本文关键字:名称 例如 反序列化 JSON 对象 | 更新日期: 2023-09-27 17:57:08

请帮助我,我是xamarin.forms和C#的新手,我已经尝试了堆栈溢出中给出的所有解决方案,但无法解决

 using (var httpClient = new HttpClient())
 {
   var response = httpClient.GetAsync(Url).Result;
   if (response.IsSuccessStatusCode)
   {
      var responseContent = response.Content;
      string contents = await responseContent.ReadAsStringAsync();
      List<abcModel> tm = JsonConvert.DeserializeObject<List<abcModel>>(contents);
      abcMaster = new ObservableCollection<SummaryModel>();
      var c = tm[0].SSum.Count();
   }
} 

public class abcModel
{
  public List<SSum> SSum { get; set; }
}
public class SSum
{
  public string Name{ get; set; }
}

我的杰森

{"a":[{"SSum":[{"Name":"Earth"}]}]}

错误:-

无法将当前 JSON 对象(例如

{"name":"value"})反序列化为类型"System.Collections.Generic.List'1[abcModel]",因为该类型需要 JSON 数组(例如 [1,2,3])才能正确反序列化。 若要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改反序列化类型,使其是可以从 JSON 对象反序列化的普通 .NET 类型(例如,不是整数等基元类型,也不是数组或列表等集合类型)。还可以将 JsonObjectAttribute 添加到类型中,以强制它从 JSON 对象反序列化。

无法反序列化当前 JSON 对象(例如 {“名称”:“值”})

因为你显然只想反序列化 json 的嵌套部分,所以这样做:

var result = JsonConvert.DeserializeObject<Dictionary<string, List<abcModel>>>(json);

JSON 中缺少 a 属性。您可以反序列化为具有该属性的类:

public class MyType
{
    public List<abcModel> A { get; set; }
}
JsonConvert.DeserializeObject<MyType>(json);

或者一起跳过该属性(@stefankmitph的答案效果很好),这是另一种选择:

JObject obj = JObject.Parse(json);
List<abcModel> model = obj["a"].ToObject<List<abcModel>>();

只是注意:通常 C# 类是PascalCased .

如果你已经有JSON字符串,你应该使用像json2csharp这样的生成器来创建响应DTO。这将防止集合与单个对象之间的错误。

public class SSum
{
    public string Name { get; set; }
}
public class A
{
    public List<SSum> SSum { get; set; }
}
public class RootObject
{
    public List<A> A { get; set; }
}

现在,您可以反序列化整个对象:

tm = JsonConvert.DeserializeObject<RootObject>(contents);