如何获得代码为“黑色”的第一个 JsonElement
我将创建代表您的 json 结构的类,然后反序列化为这些类。
你可以这样创建你的类:
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;
public class People
{
[JsonPropertyName("users")]
public List<User> Users { get; set; }
}
public class User
{
[JsonPropertyName("name")]
public string Name { get; set; }
[JsonPropertyName("code")]
public string Code { get; set; }
[JsonPropertyName("job")]
public string Job { get; set; }
}
然后反序列化:
string jsonString = "{\"users\":[{\"name\":\"John\",\"code\":\"white\",\"job\":\"actor\"},{\"name\":\"Oliver\",\"code\":\"black\",\"job\":\"seller\"}]}";
People people = JsonSerializer.Deserialize<People>(jsonString);
现在你可以得到code 为黑色的第一个User 对象:
var usr = people.Users.Where(u => u.Code == "black").FirstOrDefault();
Here's the 可以运行的示例。
每条评论更新
它是动态 JSON
您可以将json 反序列化为JsonElement,然后尝试获取所需的属性。
var people = JsonSerializer.Deserialize<JsonElement>(jsonString);
if(people is JsonElement je && je.TryGetProperty("users", out je)){
// obj will be JsonElement if match is found
var obj = je.EnumerateArray().Where(je => je.TryGetProperty("code", out je) && je.GetString() == "black").FirstOrDefault();
// Get what you need
var name = obj.TryGetProperty("name", out JsonElement eleName) ? eleName.GetString() : "No name";
var job = obj.TryGetProperty("job", out JsonElement eleJob) ? eleJob.GetString() : "No job";
Console.WriteLine(string.Format("{0}\n{1}", name, job));
}
*你可以在那里test this编码