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

C# JSON反序列化绑定DataGridView后序列化丢失嵌套字段问题

问题核心原因
  • 早期通过DataTable做中间层仅提取了部分字段,原JSON的完整嵌套结构未被保留在序列化对象中,回写时自然丢失
  • 实体类向DataGridView绑定的投影操作如果生成了新的简化DTO或匿名类,序列化该投影对象必然丢失原实体的完整结构
  • 自定义的内部操作属性如果未加序列化忽略标记,会被输出到JSON中,导致和原结构格式不符
具体实现方案

1. 实体类改造

  • 给quicktype生成的原结构实体类添加partial关键字,将类拆分到两个独立cs文件:一个保留quicktype自动生成的原结构代码,不要做任何手动修改;另一个为自定义扩展的partial类文件,所有软件内部用的自定义属性都写在这个文件中,后续需要更新原JSON结构时,直接覆盖自动生成的文件即可,不会丢失自定义逻辑
  • 所有自定义属性都添加Newtonsoft.Json的[JsonIgnore]特性,确保序列化时不会被输出到JSON文件
    示例代码:
// 自定义扩展的partial类文件
public partial class Root // 类名和quicktype生成的根实体类名保持一致
{
    [JsonIgnore]
    public bool IsSelected { get; set; } // 示例自定义属性1:UI选中状态
    [JsonIgnore]
    public string OperateRemark { get; set; } // 示例自定义属性2:内部操作备注
}
  • 如果原JSON存在动态扩展字段,在实体类中添加带[JsonExtensionData]特性的字典属性,自动存储未匹配到实体定义的额外字段,序列化时会自动写回
    示例代码:
[JsonExtensionData]
public Dictionary<string, JToken> ExtraFields { get; set; }

2. DataGridView绑定逻辑调整

  • 禁止将原实体类投影为简化DTO绑定,直接绑定原实体类的列表作为数据源
  • 关闭DataGridView的自动生成列dataGridView1.AutoGenerateColumns = false,手动添加需要展示的列,将列的DataPropertyName配置为对应实体属性的名称,嵌套层级的属性直接写完整路径即可(例如UserInfo.Address.City)
  • 不需要展示的原结构字段、自定义属性不需要做额外处理,只要不在手动列中添加就不会显示,不会影响底层数据源的完整结构

3. 序列化回写配置

  • 序列化时使用和反序列化完全一致的Newtonsoft.Json配置,保证枚举、日期、空值的处理逻辑和原文件对齐
  • 开启NullValueHandling.Include配置,确保原JSON中的空值字段不会被省略
  • 开启Formatting.Indented配置,保持和原文件一致的缩进格式,避免不必要的文件差异
    示例代码:
var serializeSettings = new JsonSerializerSettings
{
    NullValueHandling = NullValueHandling.Include,
    Formatting = Formatting.Indented,
    // 对齐反序列化时的配置,例如日期格式、枚举转换规则等
    DateFormatString = "yyyy-MM-dd HH:mm:ss",
    Converters = new List<JsonConverter> { new StringEnumConverter() }
};
string outputJson = JsonConvert.SerializeObject(yourRootEntity, serializeSettings);
File.WriteAllText(targetJsonPath, outputJson, Encoding.UTF8);
验证步骤
  • 先做无修改回写验证:将原JSON文件反序列化为实体后直接序列化回写为新文件,对比两个文件的结构和字段,确认没有字段丢失、格式完全一致
  • 再做修改验证:修改DataGridView绑定的字段值后回写,确认修改的字段生效,其他原结构字段保持不变
  • 最后验证自定义属性不会被输出到序列化后的JSON中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:06:04