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

如何在System.Text.Json契约修改器中读取JsonPropertyInfo的DeclaringType?

无需反射获取JsonPropertyInfo的DeclaringType方法

在System.Text.Json的类型系统中,虽然JsonPropertyInfo本身未直接公开DeclaringType,但可通过其公开的UnderlyingProperty属性间接获取目标信息:

  1. 先检查JsonPropertyInfo.UnderlyingProperty是否非空——该属性对应定义当前属性的反射PropertyInfo对象
  2. 通过PropertyInfo.DeclaringType即可拿到属性的声明类型

基于你提供的示例代码,修改后的实现如下:

// 自定义修改器:获取属性的声明类型
static void GetDeclaringTypeModifier(JsonTypeInfo typeInfo)
{
    foreach (JsonPropertyInfo propertyInfo in typeInfo.Properties)
    {
        // 获取对应CLR属性的反射信息
        var underlyingProp = propertyInfo.UnderlyingProperty;
        if (underlyingProp != null)
        {
            Type declaringType = underlyingProp.DeclaringType;
            // 此处可基于declaringType实现自定义序列化逻辑
            Console.WriteLine($"属性 {propertyInfo.Name} 的声明类型: {declaringType?.FullName}");
        }
    }
}

注意事项

  • UnderlyingProperty仅在属性基于CLR实体类属性定义时才有值,若为手动创建的动态JsonPropertyInfo(无对应CLR属性),该属性会返回null,这类场景需单独处理,但常规实体序列化场景完全适用。
  • 该方法仅支持.NET 6及以上版本的System.Text.Json,因为UnderlyingProperty是.NET 6中新增的公开属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 20:26:02