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

C#通过JsonProperty特性名访问类属性值及CS1525错误解决

错误产生原因

你代码里[config]的写法不符合C#语法规范,直接触发了编译错误:

Invalid expression term '['.(无效的表达式项“[”)

具体原因:

  • C#中的方括号[]仅用于数组定义/访问、索引器调用、特性标注、C# 12及以上版本的集合表达式初始化场景,没有将单个对象包裹在方括号内的合法语法。
  • 你这里多余的方括号让编译器无法解析表达式,因此在左方括号位置抛出CS1525错误。
  • 补充:你原本的代码就算去掉方括号,也只能拿到匹配的属性元数据PropertyInfo对象,还没有真正读取到属性的存储值,达不到最终的取值需求。
修正后的实现代码

首先确保你已经引入了必要的命名空间:

using Newtonsoft.Json;
using System.Reflection;
using System.Linq;

核心逻辑代码如下,去掉了多余的方括号,补充了属性值读取的逻辑,加了空值校验和显式绑定标记让逻辑更稳妥:

Configuration config = new Configuration();
config.BCParameterfixtureHeight = "1";

// 按JsonProperty标注的名称匹配目标属性
var targetProp = config.GetType()
    .GetProperties(BindingFlags.Public | BindingFlags.Instance)
    .FirstOrDefault(prop => 
        prop.GetCustomAttributes<JsonPropertyAttribute>()
            .Any(attr => attr.PropertyName.Equals("B_C.Parameter.fixtureHeight"))
    );

if (targetProp != null)
{
    // 传入实例读取属性实际值
    string propValue = targetProp.GetValue(config) as string;
    // 此时propValue的取值就是"1",符合预期
}
补充说明

如果你项目用的是System.Text.Json序列化库而非Newtonsoft.Json,需要把特性判断逻辑对应替换:

  • 要匹配的特性类型是System.Text.Json.Serialization.JsonPropertyNameAttribute
  • 特性上存储JSON属性名的字段是Name,而非PropertyName

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:01:23