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
看上去象下面这样:
是否有可能得到的ProductID
和Price
值。我想分配给他们:
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.NET
或Newtonsoft.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
答
退房的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);
}
类似的东西。
我必须这样使用它:var data = await response.Content.ReadAsAsync(); –
eg16
'dynamic item = serializer.Deserialize