public static FluentFixedEngine Build(string json) { dynamic deserializedBuilderInfo = JObject.Parse(json); var descriptor = new FixedRecordDescriptor(); if (deserializedBuilderInfo.FixedMode != null) { descriptor.FixedMode = (FixedMode)deserializedBuilderInfo.FixedMode.Value; } if (deserializedBuilderInfo.IgnoreEmptyLines != null) { descriptor.IgnoreEmptyLines = deserializedBuilderInfo.IgnoreEmptyLines.Value; } if (deserializedBuilderInfo.Fields != null) { foreach (dynamic fieldInfo in deserializedBuilderInfo.Fields) { if (fieldInfo.Name == null || fieldInfo.Value == null) { continue; } if (fieldInfo.Value.IsArray != null && (bool)fieldInfo.Value.IsArray.Value) { CreateArray(descriptor, fieldInfo); continue; } CreateField(descriptor, fieldInfo); } } return(descriptor.Build()); }
public void Read_With_Null() { var descriptor = new FixedRecordDescriptor(); descriptor.AddField("Name") .SetLength(5) .SetTrimMode(TrimMode.Both); descriptor.AddField("MiddleName") .SetLength(5); descriptor.AddField("LastName") .SetLength(5); var engine = descriptor.Build(); var items = engine.ReadFile(@"C:\tmp\Message.txt"); Assert.AreEqual(1, items.Length); dynamic item = items[0]; Assert.AreEqual(null, item.MiddleName); }
public void Serialize_Descriptor() { var descriptor = new FixedRecordDescriptor(); descriptor.AddField("Function") .SetLength(3) .SetAlignMode(AlignMode.Right) .SetType(typeof(int)) .SetAlignChar('0'); descriptor.AddField("ArraySize") .SetLength(4) .SetAlignMode(AlignMode.Left) .SetAlignChar('0') .SetConverter(typeof(IntegerConverter)); var arrayDescriptor = descriptor.AddArray("ArrayData") .SetArrayLength(500) .SetArrayItemLength(10) .SetAlign(false); arrayDescriptor.AddField("DealId") .SetLength(10) .SetNullValue(string.Empty) .SetAlignMode(AlignMode.Right) .SetAlignChar('0'); var jsonDescriptor = descriptor.Build().Serialize(); }
public void Deserialize_Descriptor() { var descriptor = new FixedRecordDescriptor(); descriptor.AddField("Function") .SetLength(3) .SetAlignMode(AlignMode.Right) .SetAlignChar('0'); descriptor.AddField("ArraySize") .SetLength(4) .SetAlignMode(AlignMode.Left) .SetAlignChar('0') .SetConverter(typeof(IntegerConverter)); var arrayDescriptor = descriptor.AddArray("ArrayData") .SetArrayLength(500) .SetArrayItemLength(10) .SetAlign(false); arrayDescriptor.AddField("DealId") .SetLength(10) .SetNullValue(string.Empty) .SetAlignMode(AlignMode.Right) .SetAlignChar('0'); var engineToSerialize = descriptor.Build(); var jsonDescriptor = engineToSerialize.Serialize(); var engine = FluentFixedEngine.Build(jsonDescriptor); ExpandoObject item = new ExpandoObject(); item.TryAdd("Function", "001"); item.TryAdd("ArraySize", 25); List <ExpandoObject> arrayData = new List <ExpandoObject>(); for (int i = 0; i < 25; i++) { ExpandoObject arrayItem = new ExpandoObject(); arrayItem.TryAdd("DealId", "STOCKASC" + i.ToString().PadLeft(2, '0')); arrayData.Add(arrayItem); } item.TryAdd("ArrayData", arrayData); string content = engine.WriteString(new[] { item }); Assert.AreEqual("0010025STOCKASC00STOCKASC01STOCKASC02STOCKASC03STOCKASC04STOCKASC05STOCKASC06STOCKASC07STOCKASC08STOCKASC09STOCKASC10STOCKASC11STOCKASC12STOCKASC13STOCKASC14STOCKASC15STOCKASC16STOCKASC17STOCKASC18STOCKASC19STOCKASC20STOCKASC21STOCKASC22STOCKASC23STOCKASC24" + Environment.NewLine, content); }
public void Read_Multi_Array() { var descriptor = new FixedRecordDescriptor(); descriptor.AddField("MessageAction") .SetLength(32) .SetTrimMode(TrimMode.Right); descriptor.AddField("NUMPARAM") .SetLength(9) .SetAlignMode(AlignMode.Right) .SetAlignChar('0') .SetType(typeof(int)) .SetTrimMode(TrimMode.Both); descriptor.AddField("TPCONTR") .SetLength(1) .SetTrimMode(TrimMode.None) ; descriptor.AddField("TPPARM") .SetLength(1) .SetTrimMode(TrimMode.None) ; descriptor.AddField("TPCHASSI") .SetLength(1) .SetTrimMode(TrimMode.None) ; descriptor.AddField("NUMCDB") .SetLength(10) .SetTrimMode(TrimMode.Both); descriptor.AddField("TPBONUS") .SetLength(1) .SetTrimMode(TrimMode.None) ; descriptor.AddField("NUMCONTRINI") .SetLength(9) .SetAlignMode(AlignMode.Right) .SetAlignChar('0') .SetType(typeof(int)) .SetTrimMode(TrimMode.Both); descriptor.AddField("NUMCONTRFIM") .SetLength(9) .SetAlignMode(AlignMode.Right) .SetAlignChar('0') .SetType(typeof(int)) .SetTrimMode(TrimMode.Both); descriptor.AddField("TXTDESCRICAO") .SetLength(80) .SetTrimMode(TrimMode.Right); var accountingEventDescriptor = descriptor.AddArray("AccountingEvent") .SetAlign(true) .SetAlignChar(' ') .SetArrayLength(5590) .SetArrayItemLength(1118); accountingEventDescriptor.AddField("NUMPARAM") .SetLength(9) .SetAlignMode(AlignMode.Right) .SetAlignChar('0') .SetType(typeof(int)) .SetTrimMode(TrimMode.Both); accountingEventDescriptor.AddField("NUMEVENT") .SetLength(9) .SetAlignMode(AlignMode.Right) .SetAlignChar('0') .SetType(typeof(int)) .SetTrimMode(TrimMode.Both); accountingEventDescriptor.AddField("TXTDESCRICAO") .SetLength(80) .SetTrimMode(TrimMode.Right); var accountingDataDescriptor = accountingEventDescriptor.AddSubArray("AccountingData") .SetAlign(true) .SetAlignChar(' ') .SetArrayLength(1020) .SetArrayItemLength(102); accountingDataDescriptor.AddField("NUMPARAM") .SetLength(9) .SetAlignMode(AlignMode.Right) .SetAlignChar('0') .SetType(typeof(int)) .SetTrimMode(TrimMode.Both); accountingDataDescriptor.AddField("NUMEVENT") .SetLength(9) .SetAlignMode(AlignMode.Right) .SetAlignChar('0') .SetType(typeof(int)) .SetTrimMode(TrimMode.Both); accountingDataDescriptor.AddField("CODTIPO") .SetLength(2) .SetTrimMode(TrimMode.None); accountingDataDescriptor.AddField("NUMSEQ") .SetLength(4) .SetAlignMode(AlignMode.Right) .SetAlignChar('0') .SetType(typeof(int)) .SetTrimMode(TrimMode.Both); accountingDataDescriptor.AddField("DESCCONTA") .SetLength(10) .SetTrimMode(TrimMode.Right); accountingDataDescriptor.AddField("DESCCENTRO") .SetLength(10) .SetTrimMode(TrimMode.Right); accountingDataDescriptor.AddField("VLRPERCEN") .SetLength(5) .SetAlignMode(AlignMode.Right) .SetAlignChar(' ') .SetConverterFormat("N2") .SetConverter(typeof(DecimalConverter)) .SetTrimMode(TrimMode.Both); accountingDataDescriptor.AddField("CODLCTO") .SetLength(2) .SetTrimMode(TrimMode.None); accountingDataDescriptor.AddField("CODCOPA") .SetLength(1) .SetTrimMode(TrimMode.None); accountingDataDescriptor.AddField("TXTDESCRICAO") .SetLength(50) .SetTrimMode(TrimMode.Right); var engine = descriptor.Build(); var items = engine.ReadString("LOAD 000000001PRC0000000000 000000000000000000SETUP PADRÃO - REGRA DEFAULT 000000001000000001Evento default 000000001000000001CR0001244044 2PPM 09450 NPARCELA PM - SET UP PADRÃO 000000001000000001CR0002244048 2PPM 00200 NPM SET UP PADRÃO - FUNDO DE CONTINGENCIA 000000001000000001CR0003244049 2PPM 00250 NPM SET UP PADRÃO - TX ADMINISTRATIVA 000000001000000001CR0004244050 2PPM 00100 NPM SET UP PADRÃO - FIGHTING FUND 000000001000000001DB0001PARMA 2PPM 10000 NPARCELA PM SET UP PADRÃO "); }