You need to enable JavaScript to run this app. 如何以编程方式直接从dynamic类型JObject中删除属性,无需先转换为JObject
优惠活动
大模型
产品
解决方案
定价
更多

如何以编程方式直接从dynamic类型JObject中删除属性,无需先转换为JObject

问题原因

你遇到的报错是因为input声明为dynamic类型时,Properties()方法的调用属于动态调度,编译器无法自动推断Where方法中lambda表达式的委托类型,因此触发编译错误。

解决方案

完全可以不需要额外声明JObject类型变量实现属性删除,因为JsonConvert.DeserializeObject反序列化无强类型约束的JSON时,返回的实际运行时类型本身就是JObject,只需要在调用方法时做一次强转即可,强转操作不会生成新对象,也没有额外性能开销:

public new dynamic input { get; set; }

// 初始化
input = JsonConvert.DeserializeObject(jsonInput.ToString());

// 直接强转后删除多余属性,无需额外声明JObject变量
((JObject)input).Properties()
    .Where(x => !x.Name.Equals("JsonLookupData"))
    .ToList()
    .ForEach(x => x.Remove());

如果不想用强转,也可以提前把过滤逻辑声明为明确的委托类型,避开动态调度的类型推断限制:

Func<JProperty, bool> filterProp = x => !x.Name.Equals("JsonLookupData");
input.Properties().Where(filterProp).ToList().ForEach(x => x.Remove());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 06:00:04