我有这个json:
{
"test":
{
"id": 107537,
"name": "test",
"profileIconId": 785,
"revisionDate": 1439997758000,
"summonerLevel": 30
}
}
我想获得名为summonerLevel
的字段。
我试图将这个json转换为字符串,然后搜索summonerLevel
,但我知道这个解决方案是不行的。
我使用的是Json.NET。
可以使用dynamic
关键字
dynamic obj = JsonConvert.DeserializeObject(json);
Console.WriteLine(obj.unashamedohio.summonerLevel);
我假设这个json存储在字符串中,我们说json…所以尝试
string json = "...";
JObject obj = JsonConvert.DeserializeObject<JObject>(json);
JObject innerObj = obj["unashamedohio"] as JObject;
int lolSummorLvl = (int) innerObj["summonerLevel"];
您有几种可能性(如其他答案所示)。另一种可能性是使用Json提供的JObject
和JProperty
属性。为了直接获取值,像这样:
var jsonObject = (JObject)JsonConvert.DeserializeObject(json);
var unashamedohio = (JObject)(jsonObject.Property("unashamedohio").Value);
var summonerLevel = unashamedohio.Property("summonerLevel");
Console.WriteLine(summonerLevel.Value);
另一种可能是创建JSON结构的类型化模型:
public class AnonymousClass
{
public UnashamedOhio unashamedohio { get; set; }
}
public class UnashamedOhio
{
public int summonerLevel { get; set; }
}
,并使用它来检索值:
var ao = JsonConvert.DeserializeObject<AnonymousClass>(json);
Console.WriteLine(ao.unashamedohio.summonerLevel);
两种解决方案打印相同的值:30
。
在我看来,如果你从JSON结构中获取很多值,你应该尽可能使用总是类型的模型。它在IDE中提供错误检查(而不是动态的),这在运行时得到了回报。
这工作我
在这里找到-如何使用System.Text.Json从一些json中读取简单的值?
var jsonResult = JsonSerializer.Deserialize<JsonElement>(apiResponse).GetProperty("collection");
return jsonResult.EnumerateArray();
HTTPCLient GET:
using (var httpClient = new HttpClient())
{
// Headers
httpClient.DefaultRequestHeaders.Add("X-AppSecretToken", "sJkvd4hgr45hhkidf");
httpClient.DefaultRequestHeaders.Add("X-AgreementGrantToken", "r55yhhsJkved4ygrg5hssdhkidf");
using (var response = await httpClient.GetAsync("https://restapi/customers"))
{
string apiResponse = await response.Content.ReadAsStringAsync(); // Result
var jsonResult = JsonSerializer.Deserialize<JsonElement>(apiResponse).GetProperty("collection");
return jsonResult.EnumerateArray();
}
}