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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:18:00