gpt4 book ai didi

c# - 在 C# 中使用 CsvHelper 将 csv 解析为不同文化的十进制

转载 作者:行者123 更新时间:2023-12-04 14:20:49 25 4
gpt4 key购买 nike

C# 中的 CsvHelper 解析小数时出现问题。

我创建了一个从 byte[] 而不是文件获取 csv 文件的类,它工作正常。

public static List<Topic> GetAll(byte[] attachmentBytes)
{
using (Stream stream = new MemoryStream(attachmentBytes))
{
using (var reader = new StreamReader(stream, Encoding.GetEncoding(1252), true))
{
using (var csv = new CsvReader(reader))
{
csv.Configuration.Delimiter = ";";
csv.Configuration.HasHeaderRecord = true;
csv.Configuration.CultureInfo = CultureInfo.InvariantCulture;

return csv.GetRecords<Topic>().ToList();
}
}
}
}

如您所见,我添加了类以将 csv 映射到对象:

public class Topic
{
[Name("ID")]
public int Id { get; set; }

[Name("description")]
public string Description { get; set; }

[Name("DecimalPTS")]
public decimal? DecimalPts { get; set; }
}

这就是我的示例 csv 数据的样子。

ID;description;DecimalPTS
1;singing;0,6
2;speaking;2,6
3;working;3,3

但是这个解决方案会产生一个错误

CsvHelper.TypeConversion.TypeConverterException : The conversion cannot be performed.
Text: '0,6'
MemberType: System.Nullable`1[[System.Decimal, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]

当我替换时,只需执行 Replace(',','.');输入时,本地测试通过,但在我的服务器上测试失败(好像我在本地和服务器上有不同的文化)

我试图解决这个问题:

  • 我添加了 csv.Configuration.CultureInfo = CultureInfo.InvariantCulture;
  • 我用的是7.1.1 CSV版本,换成12.1.2,还是一样的错误

不幸的是,没有任何帮助。

最佳答案

尝试将你的文化设置为de-DE

csv.Configuration.CultureInfo = new CultureInfo("de-DE");

如果您的应用程序可以在

  • local 那么你可以将 culture 设置为 en-US 如果它在
  • 服务器然后你可以将文化设置为de-DE

反之亦然。

演示:

var bytes = File.ReadAllBytes(@"Path to your csv file");    
List<Topic> list = GetAll(bytes);

//Print list item to console
foreach (var item in list)
{
Console.WriteLine($"ID: {item.Id}\t Description: {item.Description}\t DecimalPTS: {item.DecimalPts}");
}

输出:

enter image description here

关于c# - 在 C# 中使用 CsvHelper 将 csv 解析为不同文化的十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55076433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com