如何用C#从JSON字符串数组提取单个值?代码报错求助
如何用C#从指定JSON中提取"file_1.txt"
你的两种实现都因为JSON节点路径错误导致空引用异常:
- 动态反序列化时,
filenames是嵌套在value节点下的,直接访问myCustomclassname.filenames会找不到对应节点,返回null - JObject解析时,直接从根节点查找
filenames,但该节点实际在value子节点内,导致filenamesToken为null,调用ToString()触发空引用
以下是三种正确的实现方式:
方法1:修正动态反序列化
var jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(json); // 按层级访问:先取value节点,再访问其下的filenames数组 var targetFile = jsonObj.value.filenames[0]; // 输出结果:file_1.txt
方法2:修正JObject解析
JObject data = JObject.Parse(json); // 先定位到value节点,再获取filenames数组 JToken filenamesToken = data["value"]["filenames"]; List<string> filenames = filenamesToken.ToObject<List<string>>(); var targetFile = filenames[0]; // 输出结果:file_1.txt
方法3:强类型反序列化(推荐,类型安全)
先定义与JSON结构匹配的实体类:
public class Root { public Value Value { get; set; } } public class Value { public List<string> Filenames { get; set; } }
然后执行反序列化并提取目标值:
var rootObj = Newtonsoft.Json.JsonConvert.DeserializeObject<Root>(json); var targetFile = rootObj.Value.Filenames[0]; // 输出结果:file_1.txt
内容的提问来源于stack exchange,提问作者Mike Johnston
相关产品推荐
相关产品推荐

