2016-06-13 3 views
0

Как я могу читать/писать файл ниже, в следующих классах с FileHelpers:Чтение и запись файлов с различными типами с FileHelpers

enter image description here

следующие классы:

public class SegmentP 
{ 
    public string RegistryType { get; set; } 
    public string Country { get; set; } 
} 
public class Detail 
{ 
    public int RegistryType { get; set; } 
    public int CodeCustomer { get; set; } 
    public double NominalValue { get; set; } 
    public SegmentP SegmentP { get; set; } 
} 
public class BatchFooter 
{ 
    public int RegistryType { get; set; } 
    public int Counter { get; set; } 
} 
public class BatchHeader 
{ 
    public int RegistryType { get; set; } 
    public int CodeService { get; set; } 
} 
public class Batch 
{ 
    public BatchHeader BatchHeader { get; set; } 
    public List<Detail> Details { get; set; } 
    public BatchFooter BatchFooter { get; set; } 
} 
public class FileFooter 
{ 
    public int RegistryType { get; set; } 
    public int Counter { get; set; } 
    public int Total { get; set; } 
} 
public class FileHeader 
{ 
    public int RegistryType { get; set; } 
    public int CompanyCode { get; set; } 
    public DateTime GenerationDate { get; set; } 
} 
public class FileExample 
{ 
    public FileHeader FileHeader { get; set; } 
    public List<Batch> Batches { get; set; } 
    public FileFooter FileFooter { get; set; } 
} 

Я бы как можно загрузить весь файл в объекте FileExample, возможно?

var fileExample = new FileExample 
{ 
    FileHeader = new FileHeader 
    { 
     RegistryType = 1, 
     CompanyCode = 1, 
     GenerationDate = new DateTime(2016, 6, 1) 
    }, 
    Batches = new List<Batch> 
    { 
     new Batch 
     { 
      BatchHeader = new BatchHeader 
      { 
       RegistryType = 2, 
       CodeService = 1 
      }, 
      Details = new List<Detail> 
      { 
       new Detail 
       { 
        RegistryType = 3, 
        CodeCustomer = 1, 
        NominalValue = 10, 
        SegmentP = new SegmentP 
        { 
         RegistryType = "P", 
         Country = "Brazil" 
        } 
       } 
      }, 
      BatchFooter = new BatchFooter 
      { 
       RegistryType = 4, 
       Counter = 1 
      } 
     } 
    }, 
    FileFooter = new FileFooter 
    { 
     RegistryType = 5, 
     Counter = 1, 
     Total = 1 
    } 
}; 

Я новичок с FileHelpers и нужно направление, как в примере, я заметил, что есть вариант Master/Detail, но в моем примере файл имеет больше типов Master/Detail. Спасибо за любую помощь.

ответ

1

Сложность в использовании FileHelpers для формата со сложной иерархией.

FileHelpers предоставляет два метода обработки нескольких типов записей: the master/detail engine и multi-record engine.

К сожалению, вполне вероятно, что вам нужны оба для вашего формата. Было бы сложно объединить их без дальнейшего кодирования.

Чтобы был ясен

  • MasterDetailEngine обслуживает заголовок/колонтитул ситуации, но в настоящее время он поддерживает только один тип детали и только один уровень вложенности.
  • MultiRecordEngine позволяет использовать несколько типов записей. Однако он рассматривает каждую строку как несвязанную запись, и иерархия (то есть, какая подробная запись принадлежит к основной записи) будет трудно определить.

Я не уверен, что FileHelpers является правильным инструментом, но если вы намерены заставить его работать это может быть стоит исследовать следующее:

  1. Разбираем файл один раз для того, чтобы разделить партии. Вы можете даже использовать FileHelpers для этого. Тогда у вас будет куча записей Batch[] со строковым свойством BatchContents.

  2. Затем перечислите Batch[] и используйте the master/detail engine для обработки BatchContents.

  3. Для экспорта - сделайте обратное. Экспортируйте каждую партию в качестве основной детали BatchContents, а затем объедините их.

Конечно, есть еще больше работы, если ваши верхние и нижние колонтитулы содержат счетчики, итоговые контрольные, контрольные суммы, и т.д.

+0

Спасибо за разъяснения. Я буду следовать этой строке и попытаться составить объект ... спасибо! –