从json结构中获取特定值

时间:2015-08-19 18:53:57

标签: c# json json.net

我有这个json:

{
    "unashamedohio": 
        {
            "id": 107537,
            "name": "UnashamedOhio",
            "profileIconId": 785,
            "revisionDate": 1439997758000,
            "summonerLevel": 30
        }
}

我想获得名为summonerLevel的字段。

我试图将此json转换为字符串,然后搜索summonerLevel,但我知道此解决方案不合适。

我正在使用Json.NET。

4 个答案:

答案 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();
                 
                }
            }