Filehelpers NullReferenceException при попытке записать нулевое десятичное значение - PullRequest
3 голосов
/ 08 ноября 2011

При использовании библиотеки FileHelpers я получаю исключение NullReferenceException при попытке записи файла .csv.

Я сузил проблему. Всякий раз, когда у меня есть нулевой десятичный знак? это бросает это исключение. Хорошо работает при чтении, просто не пишет.

Я включил образец, который показывает ту же проблему, что и мое приложение:

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;

   }
}

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Вы можете использовать пользовательский конвертер.

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();
    }
}

Вам нужно изменить класс записи, чтобы добавить атрибут [FieldConverter()] в любое поле decimal?.

[FileHelpers.DelimitedRecord(",")]
public class rec
{
    public int id;

    [FileHelpers.FieldConverter(typeof(NullableDecimalConverter))]
    public decimal? mydecimal;

}
0 голосов
/ 13 июля 2012

Не хочу отвечать на мой собственный вопрос, но FileHelpers 2.9.9 решает эту проблему.Раньше он был доступен на официальном сайте (помечен как бета), но не может найти его сейчас.

Однако он доступен в NuGet в пакете под названием FileHelpers-stable

...