【问题标题】:C# JsonConvert.DeserializeObject<dynamic> returns a null objectC# JsonConvert.DeserializeObject<dynamic> 返回一个空对象
【发布时间】:2020-02-19 00:08:51
【问题描述】:

我希望你能帮助我。我正在尝试将响应对象反序列化为 C# 中的动态对象。代码如下:

var result = await message.Content.ReadAsStringAsync();
dynamic response = JsonConvert.DeserializeObject<dynamic>(result);

foreach (dynamic backgroundTaskURL in response)
{
    filaUPloads.Add(backgroundTaskURL.href);
}

上面的响应动态对象有如下值:

{{
    "href": "/me/background-tasks/77fa9922-5a1b-4fce-ada4-7c5c5d093270"
}}

在第一次 foreach 交互时,backgroundTaskURL 动态对象读取:

{
    "href": "/me/background-tasks/77fa9922-5a1b-4fce-ada4-7c5c5d093270"
}

由于某种原因我无法理解,backgroundTaskURL 动态对象没有解析“href”属性。

请指教!谢谢!

【问题讨论】:

  • 您遇到了dynamic 的问题之一——您永远不知道自己拥有什么。在您的情况下,返回的response 不是不是数组,它是单个对象,因此您需要在没有循环的情况下执行filaUPloads.Add(response.href);

标签: c# json-deserialization jsonconvert


【解决方案1】:

如果您使用的是 Newtonsoft.Json,则可以改用 JObject,我认为这只是动态对象上的类似 JSON 映射的抽象。

var result = await message.Content.ReadAsStringAsync();
dynamic response = JsonConvert.DeserializeObject<JObject>(result);

foreach (var backgroundTaskURL in response)
{
    filaUPloads.Add(backgroundTaskURL["href"]);
}

【讨论】:

    【解决方案2】:

    试试下面的

     public class ListRecev
        {
            public string href { get; set; }
    
        }
      var resultjson = JsonConvert.DeserializeObject<ListRecev>(result);
      foreach (var backgroundTaskURL in resultjson)
      {
       filaUPloads.Add(backgroundTaskURL.href);
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 2021-12-21
      • 2017-01-11
      • 1970-01-01
      • 2021-03-31
      • 2014-07-15
      • 2018-08-25
      相关资源
      最近更新 更多