如何用C#拆分ReferenceItemId字符串为工具编号数组并过滤无效首词
C# 实现方案
核心实现逻辑
- 先将JSON反序列化为C#强类型对象
- 拆分工具编号字段,按规则过滤无效前缀
- 批量生成对应数据库实体写入库
完整代码示例
1. 定义JSON映射实体类
// 用System.Text.Json原生库的配置 public class ToolPriceDto { [System.Text.Json.Serialization.JsonPropertyName("ReferenceItemId")] public string ReferenceItemId { get; set; } [System.Text.Json.Serialization.JsonPropertyName("BaseUnitPrice")] public decimal BaseUnitPrice { get; set; } } // 你的数据库对应实体类示例 public class ToolPriceDbEntity { public string ToolCode { get; set; } public decimal Price { get; set; } public DateTime SyncTime { get; set; } }
2. 核心处理逻辑
using System.Linq; using System.Text.Json; // 假设你已经从接口获取到原始JSON字符串 rawJson var priceDto = JsonSerializer.Deserialize<ToolPriceDto>(rawJson); // 拆分编号,自动过滤空格、空字符串 var codeSegments = priceDto.ReferenceItemId .Split(' ', StringSplitOptions.RemoveEmptyEntries) .ToList(); // 过滤首段无效垃圾词:规则可按实际业务调整,示例以「有效编号均为T开头」为判断标准 if (codeSegments.Any() && !codeSegments[0].StartsWith("T", StringComparison.OrdinalIgnoreCase)) { codeSegments.RemoveAt(0); } // 批量生成数据库实体 var dbEntities = codeSegments.Select(code => new ToolPriceDbEntity { ToolCode = code, // 价格保留两位小数,符合美元计价规范 Price = Math.Round(priceDto.BaseUnitPrice, 2), SyncTime = DateTime.Now }).ToList(); // 调用你现有数据库写入逻辑批量插入即可 // EF Core 示例: // yourDbContext.ToolPriceDbEntities.AddRange(dbEntities); // yourDbContext.SaveChanges();
可选兼容方案
如果你项目用的是Newtonsoft.Json(Json.NET),只需要做两处调整:
- 实体类的属性标记换成
[JsonProperty("ReferenceItemId")] - 反序列化代码换成
JsonConvert.DeserializeObject<ToolPriceDto>(rawJson)
注意事项
- 有效编号的判断规则可按需调整,比如如果编号都是T+4位数字,可以加正则校验
^T\d{4}$过滤异常数据 - 拆分时加
StringSplitOptions.RemoveEmptyEntries可避免首尾空格、多连续空格导致的空数据问题
内容的提问来源于stack exchange,提问作者MattWolc24
相关产品推荐
相关产品推荐

