我有一个JSON字符串:
string jsonString =
"{
"users":[
{"name":"John", "code":"white", "job":"actor"},
{"name":"Oliver", "code":"black", "job": "seller"}
]
}"然后使用以下方法反序列化它:
JsonElement je = JsonDocument.Parse(jsonString).RootElement;
JsonElement.ArrayEnumerator users = je.GetProperty("users").EnumerateArray();使用system.text.json,如何获得代码为“黑色”的第一个JsonElement?我的意思是没有循环(foreach,.)。
使用newtonsoft.json,我可以简单地这样做:
dynamic json = JsonConvert.DeserializeObject(jsonString);
dynamic user = json.SelectToken("[?(@.code == 'black')]");
string name = user["name"], job = user["job"];发布于 2021-07-23 12:31:52
如何获得代码为“黑色”的第一个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);现在您可以获得第一个User对象,其中code是黑色的:
var usr = people.Users.Where(u => u.Code == "black").FirstOrDefault();下面是示例可以运行。
每个评论的更新
它是动态的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));
}*您可以在那里使用测试这个代码
https://stackoverflow.com/questions/68498956
复制相似问题