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

C# Json序列化与反序列化的更高效优雅实现方案咨询

优化实现方案
// 仅需一次反序列化即可拿到完整Configuration对象
var config = JsonConvert.DeserializeObject<Configuration>(source.ConfigData);
// 提前转为List避免IEnumerable多次枚举,同时做空值防护
var ipList = config?.IpAddresses?.ToList() ?? new List<IpAddress>();

foreach (var ipDetail in ipList)
{
    // 注意这里原代码的StartIpAddress/EndIpAddress要和类定义的Start/End属性名对应
    if (!string.IsNullOrEmpty(ipDetail.Start) && !string.IsNullOrEmpty(ipDetail.End))
    {
        if (bla == blabla) // 原有校验逻辑保持不变
        {
            ipDetail.IsValid = true;
            ipDetail.IPFamily = IPAddressFamily.IPV4;
        }
    }
}

// 直接序列化修改后的config即可,无需额外赋值IpAddresses
source.ConfigData = JsonConvert.SerializeObject(config);
return source;
核心优化点
  • 移除重复反序列化操作:原代码先后两次反序列化source.ConfigData,优化后仅执行1次反序列化,大幅减少JSON解析的CPU开销,数据量越大收益越明显
  • 去掉冗余代码:删除了无意义的new Configuration()创建操作,该对象会立即被反序列化结果覆盖,没有实际作用
  • 修复多次枚举风险:将IEnumerable<IpAddress>提前转为List,避免Any()+foreach两次枚举延迟执行的IEnumerable可能带来的重复计算、数据不一致问题
  • 代码逻辑更紧凑:校验修改和序列化操作复用同一个Configuration对象,无需额外中转storedIPAddresses变量,可读性更高

注意:原代码中访问的ipDetail.StartIpAddress、ipDetail.EndIpAddress和你定义的IpAddress类属性名Start、End不一致,需要修正属性名否则会触发空引用异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:18:03