You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从System.Text.Json.JsonElement中获取JSON属性值?

如何访问System.Text.Json.JsonElement中的JSON属性内容?

因为System.Text.Json.JsonElement是.NET中用来表示JSON解析结果的轻量级类型,它不是常规的.NET实体类——没有和JSON属性对应的CLR属性,所以用反射的GetProperty方法肯定拿不到值。

下面是几种正确的访问方式:

直接获取单个属性

用JsonElement自带的TryGetProperty方法(推荐,避免属性不存在时抛异常):

// 假设Odata是你拿到的JsonElement对象
if (Odata.TryGetProperty("someProp", out JsonElement somePropElement))
{
    // 根据属性实际类型获取值,比如字符串类型用GetString()
    string someValue = somePropElement.GetString();
    
    // 其他类型示例:
    // int numValue = somePropElement.GetInt32();
    // bool boolValue = somePropElement.GetBoolean();
    // DateTime dateValue = somePropElement.GetDateTime();
}

如果确定属性一定存在,也可以直接用GetProperty,但属性不存在时会抛出KeyNotFoundException:

JsonElement somePropElement = Odata.GetProperty("someProp");
string someValue = somePropElement.GetString();

反序列化为实体类

如果需要多次访问多个属性,把JsonElement反序列化为对应的.NET实体类会更方便:
首先定义和JSON结构匹配的类:

public class MyDataModel
{
    public string SomeProp { get; set; }
    public string AnotherProp { get; set; }
    // 按需添加其他属性
}

然后调用Deserialize方法:

MyDataModel model = Odata.Deserialize<MyDataModel>();
string someValue = model.SomeProp;
string anotherValue = model.AnotherProp;

遍历所有属性

如果需要遍历JsonElement中的所有键值对,用EnumerateObject方法:

foreach (JsonProperty property in Odata.EnumerateObject())
{
    string propName = property.Name;
    JsonElement propValue = property.Value;
    
    // 根据ValueKind处理不同类型的值
    switch (propValue.ValueKind)
    {
        case JsonValueKind.String:
            Console.WriteLine($"{propName}: {propValue.GetString()}");
            break;
        case JsonValueKind.Number:
            Console.WriteLine($"{propName}: {propValue.GetInt32()}");
            break;
        // 其他类型分支...
    }
}

注意事项

  • 调用GetXXX方法时,要确保JsonElement的ValueKind和目标类型匹配,否则会抛出异常,不确定类型时可以先检查ValueKind;
  • JsonElement是值类型,操作时无需担心空引用,但要注意它的生命周期和原始JSON文档的关系(如果是从文档中解析出来的,文档释放后可能无法访问)。

内容的提问来源于stack exchange,提问作者ISquared

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:50:34