从json结构中获取一个特定的值



我有这个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提供的JObjectJProperty属性。为了直接获取值,像这样:

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

相关内容

  • 没有找到相关文章

最新更新