Filehelpers在尝试写入空十进制值时抛出NullReferenceException

本文关键字:NullReferenceException 十进制 Filehelpers | 更新日期: 2023-09-27 18:13:41

当使用FileHelpers库时,我在试图写。csv文件时得到一个NullReferenceException。

我已经把问题的范围缩小了。当小数为零时?它抛出这个异常。它可以很好地用于阅读,但不能用于书写。

我已经包含了一个示例,显示了与我的应用程序相同的问题:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication11
{
   class Program
   {
      static void Main(string[] args) {
         rec record = new rec { id = 1, mydecimal = null };
         List<rec> records = new List<rec> { record };
         FileHelpers.FileHelperEngine<rec> engine = new FileHelpers.FileHelperEngine<rec>();
         Console.WriteLine(engine.WriteString(records));
      }
   }
   [FileHelpers.DelimitedRecord(",")]
   public class rec
   {
      public int id;
      public decimal? mydecimal;
   }
}

Filehelpers在尝试写入空十进制值时抛出NullReferenceException

您可以使用自定义转换器。

public class NullableDecimalConverter : FileHelpers.ConverterBase
{
    public override object StringToField(string from)
    {
        return from;
    }
    public override string FieldToString(object fieldValue)
    {
        if (fieldValue == null)
            return String.Empty;
        return fieldValue.ToString();
    }
}

您需要修改您的记录类以向任何decimal?字段添加[FieldConverter()]属性。

[FileHelpers.DelimitedRecord(",")]
public class rec
{
    public int id;
    [FileHelpers.FieldConverter(typeof(NullableDecimalConverter))]
    public decimal? mydecimal;
}

不想回答我自己的问题,但是FileHelpers 2.9.9解决了这个问题。它曾经在官方网站上可用(标记为测试版),但现在找不到它了。

但是在NuGet中有一个名为FileHelpers-stable的包