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

序列化时重复客户ID未合并历史记录,请求验证模型正确性

问题:客户ID大小写差异导致序列化后生成重复父节点,需合并对应历史记录

我现在碰到个棘手的小问题:手里有一批包含客户ID和对应历史记录的数据列表,我把它映射到Customer模型后放进CustomerList里,结果序列化输出时,同一客户ID(比如liebaj7337和LieBaj7337)居然生成了多个父节点。我想要的是同一客户ID(不区分大小写)下合并所有History记录,麻烦帮忙看看我的模型是否符合预期,或者该怎么调整才能达到目标?

当前序列化输出

[
  { 
    "INI_CUSTOMER_ID": "liebaj7337", 
    "History": [
      { 
        "DealerID": "1", 
        "VisitedStoreName": "1", 
        "VisitedDate": "1", 
        "Activity": "1", 
        "VehicleID": "1", 
        "VehicleName": "1", 
        "OCN": "", 
        "Source": "1" 
      }
    ] 
  }, 
  { 
    "INI_CUSTOMER_ID": "LieBaj7337", 
    "History": [
      { 
        "DealerID": "2", 
        "VisitedStoreName": "2", 
        "VisitedDate": "2", 
        "Activity": "2", 
        "VehicleID": "2", 
        "VehicleName": "2", 
        "OCN": "", 
        "Source": "2" 
      }
    ]
  }
]

预期输出

[
  { 
    "INI_CUSTOMER_ID": "liebaj7337", 
    "History": [
      { 
        "DealerID": "1", 
        "VisitedStoreName": "1", 
        "VisitedDate": "1", 
        "Activity": "1", 
        "VehicleID": "1", 
        "VehicleName": "1", 
        "OCN": "", 
        "Source": "1" 
      },
      { 
        "DealerID": "2", 
        "VisitedStoreName": "2", 
        "VisitedDate": "2", 
        "Activity": "2", 
        "VehicleID": "2", 
        "VehicleName": "2", 
        "OCN": "", 
        "Source": "2" 
      }
    ]
  }
]

我当前使用的模型代码

public class CustomerList 
{ 
    public List<Customer> Customers { get; set; } 
}

public class Customer 
{ 
    public string INI_CUSTOMER_ID { get; set; } 
    public List<History> History { get; set; } 
}

public class History 
{ 
    public string DealerID { get; set; } 
    public string VisitedStoreName { get; set; } 
    public string VisitedDate { get; set; } 
    public string Activity { get; set; } 
    public string VehicleID { get; set; } 
    public string VehicleName { get; set; } 
    public string OCN { get; set; } 
    public string Source { get; set; } 
}

问题分析与解决方案

首先得说:你的模型结构本身是完全符合预期输出的!问题出在客户ID的大小写处理和数据合并逻辑上——因为C#里字符串默认是区分大小写的,所以liebaj7337和LieBaj7337会被当成两个不同的客户ID,自然生成两个父节点。

要实现预期效果,你需要在把原始数据映射到模型之前,先做两步处理:

  1. 统一客户ID的大小写(比如全部转小写或大写)
  2. 按统一后的ID分组,把同一客户的History记录合并到一个Customer对象中

这里给你一段用LINQ处理的示例代码,假设你的原始数据是一个包含客户ID和单条History的集合:

// 假设rawData是你的原始数据集合,格式为List<(string CustomerId, History HistoryRecord)>
var mergedCustomers = rawData
    // 按统一小写后的客户ID分组
    .GroupBy(item => item.CustomerId.ToLowerInvariant())
    // 把每组的History合并到一个Customer对象里
    .Select(group => new Customer
    {
        INI_CUSTOMER_ID = group.Key, // 用统一后的小写ID
        History = group.Select(item => item.HistoryRecord).ToList()
    })
    .ToList();

// 最后赋值给CustomerList
var customerList = new CustomerList { Customers = mergedCustomers };

这样处理之后,再序列化customerList,就能得到你想要的同一客户ID下合并所有History的结果了。

内容的提问来源于stack exchange,提问作者Aldrin B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:10:39