C#将按|分隔的多对象长字符串序列化为JSON的问题求解
问题解决方法
错误原因
- 原始汇率数据每5个被
|分隔的字段对应1条完整记录,你错误地将每个分隔结果单独作为1条记录处理 - 遍历过程中你把同一个分割字符串赋值给了
DailyCourse的所有属性,导致所有属性值完全一致 list.Add(model)写在循环外部,只会把最后一次循环生成的对象加入集合,前面生成的对象全部被丢弃- 你提供的测试字符串中
BRL 4,016位置漏写了分隔符|,会导致后续字段全部错位,需要先修正
修正后代码
// 修正原始字符串中漏写的|分隔符 var test = "Australia | dolar | 1 | AUD | 15,608 | Brasil | real | 1 | BRL | 4,016 | Bulgaria | lev | 1 | BGN | 13,066 | China | žen-min-pi | 1 | CNY | 3,369"; // 分割后同时去除每个字段前后的多余空格 var split = test.Split('|').Select(item => item.Trim()).ToArray(); var list = new List<DailyCourse>(); // 按步长5遍历,每5个字段组装一个DailyCourse对象 for (int i = 0; i < split.Length; i += 5) { // 边界判断,避免最后剩余字段不足5个时数组越界 if (i + 4 >= split.Length) break; var model = new DailyCourse() { Country = split[i], Currency = split[i + 1], Amount = split[i + 2], // 如果Amount是数值类型,可转换为int:int.Parse(split[i + 2]) Code = split[i + 3], Course = split[i + 4] // 如果Course是小数类型,可转换为decimal:decimal.Parse(split[i + 4].Replace(',', '.')) }; // 将组装好的对象加入集合,注意Add操作要放在循环内部 list.Add(model); } // 序列化时可开启缩进方便查看 var json = JsonSerializer.Serialize(list, new JsonSerializerOptions { WriteIndented = true }); Console.WriteLine(json);
输出示例
[ { "Date": null, "Country": "Australia", "Currency": "dolar", "Amount": "1", "Code": "AUD", "Course": "15,608" }, { "Date": null, "Country": "Brasil", "Currency": "real", "Amount": "1", "Code": "BRL", "Course": "4,016" }, { "Date": null, "Country": "Bulgaria", "Currency": "lev", "Amount": "1", "Code": "BGN", "Course": "13,066" }, { "Date": null, "Country": "China", "Currency": "žen-min-pi", "Amount": "1", "Code": "CNY", "Course": "3,369" } ]
内容的提问来源于stack exchange,提问作者Vanessa Kensington
相关产品推荐
相关产品推荐

