.NET中如何将嵌套对象属性路径与值存入Dictionary<string,string>
嵌套对象属性路径提取实现方案
完整实现代码
private Dictionary<string, string> GetValueByPropertyToken(object obj, string parentPath = "") { var result = new Dictionary<string, string>(); if (obj == null) return result; var objType = obj.GetType(); // 处理值类型和字符串,直接存入字典 if (objType.IsValueType || objType == typeof(string)) { if (!string.IsNullOrEmpty(parentPath)) { result.Add(parentPath, obj.ToString()); } return result; } // 遍历当前对象的所有属性 foreach (var prop in objType.GetProperties()) { // 拼接当前属性的完整路径 var currentPath = string.IsNullOrEmpty(parentPath) ? prop.Name : $"{parentPath}.{prop.Name}"; var propValue = prop.GetValue(obj); // 递归处理嵌套对象,合并结果 foreach (var kvp in GetValueByPropertyToken(propValue, currentPath)) { result.Add(kvp.Key, kvp.Value); } } return result; }
关键实现说明
- 递归遍历嵌套结构:通过可选参数
parentPath追踪当前属性的上级路径,遇到嵌套的引用类型对象时,递归调用函数处理子属性,实现深层遍历。 - 终止条件控制:当对象是值类型(如
int、decimal)或string时,直接将当前路径与值存入字典,停止递归,避免无意义的深层遍历。 - 路径拼接逻辑:根据父路径是否为空,动态生成完整属性路径(如
Order→Order.CustomerName)。 - 空值安全处理:对传入的
null对象直接返回空字典,避免空引用异常。
测试示例
使用你提供的嵌套对象进行测试:
var obj = new { Order = new { CustomerName = "John", OrderTotal = "10.50", Qty = 2, Address = new { Street = "Park Road", Country = "USA" } } }; var resultDict = GetValueByPropertyToken(obj); // 输出结果 foreach (var item in resultDict) { Console.WriteLine($"<{item.Key},\"{item.Value}\">"); }
输出结果与预期一致:
<Order.CustomerName,"John"> <Order.OrderTotal,"10.50"> <Order.Qty,"2"> <Order.Address.Street,"Park Road"> <Order.Address.Country,"USA">
内容的提问来源于stack exchange,提问作者Isanka Thalagala
相关产品推荐
相关产品推荐

