【问题标题】:C# - Get values from JSON response and assign them to variablesC# - 从 JSON 响应中获取值并将它们分配给变量
【发布时间】:2016-07-27 11:18:23
【问题描述】:

我编写了这些发出 API 请求的代码行,作为回报,我得到了有效的 JSON 响应:

using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(_baseAddress);
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                HttpResponseMessage response = await client.GetAsync(_apiUrl);

                if (response.IsSuccessStatusCode)
                {
                    var data = await response.Content.ReadAsAsync<ExpandoObject>();
                    return Json(data);
                }

            }

data 如下所示:

是否可以获取ProductIDPrice 的值。我想将它们分配给类似的东西:

int productId = ...
int price = ...

我如何使用C# 做到这一点?

【问题讨论】:

    标签: c# json


    【解决方案1】:

    查看 Newtonsoft Json nuget 包。基本上,您使用所需的变量创建模型,然后从 Newtonsoft 调用反序列化方法。这是一些伪代码

    public class MyObject
    { 
        int ProductID { get; set; }
        int Price { get; set; }
        int Systems { get; set; }    
    }
    

    然后在你的方法中:

    using Newtonsoft.Json;
    
    public class MyMethod(string json)
    {
         MyObject obj = JsonConvert.DeserializeObject<MyObject>(json);
    }
    

    类似的东西。

    【讨论】:

      【解决方案2】:

      .Net 4.0 支持直接从 json 创建动态对象:

      JavaScriptSerializer serializer = new JavaScriptSerializer(); 
      dynamic item = serializer.Deserialize<object>("{ \"productId\":\"124889\" }");
      string test= item["productId"];
      

      如果您使用Json.NETNewtonsoft.Json.Linq - 这个answer 应该可以帮助您。

      Json.Net

      dynamic stuff = JsonConvert.DeserializeObject("{ 'Name': 'Jon Smith', 'Address': { 'City': 'New York', 'State': 'NY' }, 'Age': 42 }");
      
      string name = stuff.Name;
      string address = stuff.Address.City;
      

      Newtonsoft.Json.Linq

      dynamic stuff = JObject.Parse("{ 'Name': 'Jon Smith', 'Address': { 'City': 'New York', 'State': 'NY' }, 'Age': 42 }");
      
      string name = stuff.Name;
      string address = stuff.Address.City;
      
      string name = stuff.Name;
      string address = stuff.Address.City;
      

      【讨论】:

      • 我必须这样使用它:var data = await response.Content.ReadAsAsync();
      • dynamic item = serializer.Deserialize&lt;object&gt;(data)
      【解决方案3】:

      创建一个对象并反序列化 json 对象。

      http://www.newtonsoft.com/json/help/html/t_newtonsoft_json_jsonconvert.htm

      【讨论】:

        【解决方案4】:

        我很抱歉回答我自己的问题,但我刚刚找到了解决方案,我想在这里发帖: 需要在data后面加上这几行代码

        var _dataResponse = JToken.Parse(JsonConvert.SerializeObject(data));
        var _dataResponseProductID = _dataResponse["ProductID"];
        var _dataResponsePrice = _dataResponse["Price"];
        

        之后可以将所取的值转换为所需的data types.

        【讨论】:

          猜你喜欢
          • 2023-03-23
          • 2012-08-21
          • 2019-05-24
          • 2015-08-24
          • 1970-01-01
          • 2020-05-19
          • 1970-01-01
          • 2023-02-25
          • 1970-01-01
          相关资源
          最近更新 更多