我有这个json:
{
"unashamedohio":
{
"id": 107537,
"name": "UnashamedOhio",
"profileIconId": 785,
"revisionDate": 1439997758000,
"summonerLevel": 30
}
}
我想获得名为summonerLevel
的字段。
我试图将此json转换为字符串,然后搜索summonerLevel
,但我知道此解决方案不合适。
我正在使用Json.NET。
答案 0 :(得分:3)
您可以使用dynamic
关键字
dynamic obj = JsonConvert.DeserializeObject(json);
Console.WriteLine(obj.unashamedohio.summonerLevel);
答案 1 :(得分:1)
我假设这个json存储在一个字符串中,让我们说叫json ...所以试试
string json = "...";
JObject obj = JsonConvert.DeserializeObject<JObject>(json);
JObject innerObj = obj["unashamedohio"] as JObject;
int lolSummorLvl = (int) innerObj["summonerLevel"];
答案 2 :(得分:0)
您有几种可能性(已在其他答案中显示)。另一种可能性是使用Json.Net提供的ERROR ITMS-90060: "this bundle is invalid. The value for key CFBundleShortVersionString '1.0.1.10' in the info.plist file must be a period-separated list of at most three non-negative integers."
和JObject
属性,以便直接获取这样的值:
JProperty
另一种可能性是创建JSON结构的类型化模型:
var jsonObject = (JObject)JsonConvert.DeserializeObject(json);
var unashamedohio = (JObject)(jsonObject.Property("unashamedohio").Value);
var summonerLevel = unashamedohio.Property("summonerLevel");
Console.WriteLine(summonerLevel.Value);
并使用它来检索值:
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);
。
IMO你应该尽可能使用常用的类型模型,如果你从JSON结构中获取大量的值。它提供了IDE中的错误检查(与动态相反),它在运行时得到了回报。
答案 3 :(得分:0)
这对我有用
在这里找到 - How do you read a simple value out of some json using System.Text.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();
}
}