C# - 从JSON响应获取数值并赋值给变量

C# - 从JSON响应获取数值并赋值给变量

问题描述:

我已经写了几行代码,这使得API请求,作为回报,我得到有效的JSON响应:C# - 从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看上去象下面这样:

enter image description here

是否有可能得到的ProductIDPrice值。我想分配给他们:

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

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

对不起,我要回答我自己的问题,但我只是找到了解决办法,我想在这里发布: 您需要后data

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

到这些代码行添加所采取的值后可以被转换为想要的data types.

.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

+0

我必须这样使用它:var data = await response.Content.ReadAsAsync (); – eg16

+0

'dynamic item = serializer.Deserialize (data)' –

退房的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); 
} 

类似的东西。