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

在C#中从原始JSON POST请求获取键名

提取JSON对象的键名解决方案

嘿,我来帮你搞定这个问题!你已经成功读取并反序列化了JSON请求体,接下来要提取里面的所有键名其实有几种很方便的方法,我给你详细说说:

方法一:使用JObject(Newtonsoft.Json专属类型)

因为JsonConvert.DeserializeObject在不指定具体类型时,返回的本质就是JObject,我们可以直接将其转换为该类型来操作:

// 读取请求体的代码(你原来的逻辑)
StreamReader reader = new StreamReader(Request.Body);
reader.BaseStream.Position = 0;
string jsonText = reader.ReadToEnd();

// 直接反序列化为JObject类型
JObject jsonObject = JsonConvert.DeserializeObject<JObject>(jsonText);

// 提取所有键名到列表中
List<string> keyNames = jsonObject.Properties()
                               .Select(property => property.Name)
                               .ToList();

// 现在keyNames里就包含了FirstName、LastName、MiddleInitials

这种方法的优势是可以直接操作JSON结构,哪怕值是null或者复杂类型,都能轻松拿到顶层键名;如果需要处理嵌套的JSON对象,也可以通过递归遍历JObject的子属性来提取所有层级的键。

方法二:反序列化为Dictionary<string, object>

JSON对象本质就是键值对集合,我们可以直接将其反序列化为字典类型,然后获取键集合:

// 同样先读取请求体
StreamReader reader = new StreamReader(Request.Body);
reader.BaseStream.Position = 0;
string jsonText = reader.ReadToEnd();

// 反序列化为字典
Dictionary<string, object> jsonDict = JsonConvert.DeserializeObject<Dictionary<string, object>>(jsonText);

// 提取所有键名
List<string> keyNames = jsonDict.Keys.ToList();

这种方法更贴近常规的集合操作,如果你习惯用字典来处理键值对,这个方式会很顺手。

小提示

如果你的JSON里包含嵌套对象(比如某个键的值又是一个JSON对象),上面两种方法只会提取顶层的键名。要是需要递归提取所有层级的键,你可以写一个简单的递归方法来遍历嵌套结构~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:30:12