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

C#如何获取dynamic动态对象第n个属性名并替换null为空字符串

问题原因

你用dynamic接收的反序列化对象实际是Newtonsoft.Json.Linq.JObject类型。直接调用GetType().GetProperties()是通过反射获取.NET运行时类型的原生实例成员,返回的自然是JToken、JObject类自带的属性(如Parent、First、Count等),和JSON结构里的业务字段没有关系。

实现方案

Newtonsoft.Json内置了专门操作JSON结构的API,不需要使用反射,直接就能枚举业务字段、完成null值替换:

  • 将dynamic对象显式转换为JObject类型
  • 调用Properties()方法即可枚举所有JSON业务属性,每个属性的Name对应字段名,Value对应字段值
  • 遍历属性时,将值类型为JTokenType.Null的字段值替换为空字符串即可

完整代码:

JObject x = (JObject)data.elements[i];

// 调用ToList()缓存属性集合,避免遍历中修改值触发枚举异常
foreach (JProperty prop in x.Properties().ToList())
{
    if (prop.Value.Type == JTokenType.Null)
    {
        prop.Value = "";
    }
}

// 如需获取第n个业务属性的名称,按索引取值即可,索引从0开始
// 例:获取示例中第3个属性order_Date的名称
string propName = x.Properties().ElementAt(2).Name;
其他可选方案

如果你的JSON结构固定,也可以直接反序列化为对应的强类型C#类,遍历类中字符串类型的属性,将null值赋值为空字符串即可。但对于结构动态的JSON场景,直接操作JObject是最轻量、性能最优的方案,不需要额外编写类型映射逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:51:19