【问题标题】:C# Json consume out putting null values Asp.net core blazorC# Json 消耗掉空值 Asp.net core blazor
【发布时间】:2020-07-20 21:19:14
【问题描述】:

我有一个 web api,它返回一个对象类型的数组。 Web api 工作正常。当我尝试将对象反序列化为对象类型的数组时,我只会得到空值。我错过了什么?

json:

{
    "results":"[{\"Name\":\"Rocky\",\"Breed\":\"Pitbull\",\"Color\":\"Brown\",\"Weight\":\"76\",\"OwnerUserId\":null,\"FamilyId\":\"1006949\"},{\"Name\":\"Casper\",\"Breed\":\"Terrier \",\"Color\":\"White \",\"Weight\":\"15\",\"OwnerUserId\":null,\"FamilyId\":\"1006949\"}]"
}

反序列化代码:

public async Task values()
{
    var AJson = new root();
    var client = http.CreateClient();
    var response = await client.GetAsync("https://doggoapi2020.azurewebsites.net/Doggies/1006949");
    var responsebody = await response.Content.ReadAsStringAsync();
        
    AJson = Newtonsoft.Json.JsonConvert.DeserializeObject<root>(responsebody);
}

型号:

public class DoggoData
{
     
    [JsonProperty(PropertyName = "Name")]
    public string Name { get; set; }

    [JsonProperty(PropertyName = "Breed")]
    public string Breed { get; set; }
     
    public string Color { get; set; }
     
    public string Weight { get; set; }
      
    public string OwnerUserId { get; set; }
   
    public string FamilyId { get; set; }

}

public class root
{
    public DoggoData[] Jsonres { get; set; }
}

【问题讨论】:

标签: c# json rest asp.net-core


【解决方案1】:

将您的根类更改为此。 Json 属性必须与名称匹配

public class Root
{
    [JsonProperty("results")]
    public string Jsonres { get; set; }
}

您的结果有一个字符串,一旦获得该字符串,您可以将其反序列化到 DoggoData 列表。

public class DoggoData
{

    [JsonProperty(PropertyName = "Name")]
    public string Name { get; set; }

    [JsonProperty(PropertyName = "Breed")]
    public string Breed { get; set; }

    public string Color { get; set; }

    public string Weight { get; set; }

    public string OwnerUserId { get; set; }

    public string FamilyId { get; set; }

}

public class Root
{
    [JsonProperty("results")]
    public string Jsonres { get; set; }
}

Root obj = JsonConvert.DeserializeObject<Root>(json);
List<DoggoData> listObj = JsonConvert.DeserializeObject<List<DoggoData>>(obj.Jsonres);

// Or
List<DoggoData> listObj2 = JsonConvert.DeserializeObject<List<DoggoData>>(JObject.Parse(json)["results"]);

类名的命名约定是大写首字母。我建议使用Root 而不是root

【讨论】:

  • 谢谢!你的回答很好,给了我很大的洞察力!我赞成您的回答,但我的帐户是新帐户,因此不会显示。
  • 如果这个或任何答案已经解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
猜你喜欢
  • 2021-09-26
  • 1970-01-01
  • 2020-02-21
  • 1970-01-01
  • 2018-01-26
  • 2021-05-23
  • 2020-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多