public void Serialize <T>(T Object, TextWriter stream) where T : new() { int totalWritten = 0; var data = ObjectInspector.ReadObject(Object, Options); ObjectReadComplete?.Invoke(this, data); for (int i = 0; i < data.Length; i++) { var val = data[i]; string value = val.Formatter.Serialize(val); if (value.Length != val.Length) { throw new InvalidOperationException($"Serialized Length mismatch on {val.Name}. Expected {val.Length} but '{value}' has {value.Length}"); } stream.Write(value); totalWritten += value.Length; bool checkSeparator = !string.IsNullOrEmpty(FieldSeparator); if (!LastFieldHadSeparator && i == data.Length - 1) { checkSeparator = false; } if (checkSeparator) { stream.Write(FieldSeparator); totalWritten += FieldSeparator.Length; } } stream.Flush(); var regSize = ObjectInspector.GetRegistrySizeAttribute <T>(); if (regSize != null) { if (totalWritten != regSize.Length) { throw new InvalidOperationException($"Serialization completed with total Length mismatch. Written: {totalWritten} Expected: {regSize.Length}"); } } }
public T Deserialize <T>(string line, out SerializationResult Results) where T : new() { var bs = new BlockSerializer(Options); if (ObjectReadComplete != null) { bs.ObjectReadComplete += ObjectReadComplete; } var regSize = ObjectInspector.GetRegistrySizeAttribute <T>(); if (regSize != null) { if (line.Length != regSize.Length) { throw new InvalidOperationException($"Deserialization cancelled due to Length mismatch. Line-Lenght: {line.Length} Expected: {regSize.Length}"); } } return(bs.Deserialize <T>(new StringReader(line), out Results)); }