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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:00:56