Пример #1
0
        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));
        }