Esempio n. 1
0
        private static byte[] ObjectToBytes(TObject outObject)
        {
            var payload           = new List <byte[]>();
            var fieldSizeProvider = SerializationHelper.GetValue(FieldSizeProvider, outObject);

            foreach (var valueOrdinal in FieldValueOrdinals)
            {
                MemberInfo sizeOrdinal;

                if (!FieldSizeOrdinals.TryGetValue(valueOrdinal.Key, out sizeOrdinal))
                {
                    throw new V4ObjectSerializationException("Failed to serialize object.");
                }

                var value = SerializationHelper.GetValue(valueOrdinal.Value, outObject);

                if (value == null)
                {
                    throw new V4ObjectSerializationException("Failed to serialize object.");
                }

                byte[] asBytes = null;

                if (value is string)
                {
                    asBytes = Encoding.UTF8.GetBytes((string)value);
                }
                else if (value is IEnumerable)
                {
                    var asEnumerable = (IEnumerable)value;
                    var byteList     = new List <byte>();

                    foreach (var item in asEnumerable)
                    {
                        byteList.AddRange(Miscellaneous.ConcatArrays(Miscellaneous.StructToBytes(item), new byte[] { 0x0 }));
                    }

                    asBytes = byteList.ToArray();
                }

                if (asBytes == null)
                {
                    throw new V4ObjectSerializationException("Failed to serialize object.");
                }

                SerializationHelper.SetValue(sizeOrdinal, fieldSizeProvider, asBytes.Length);
                payload.Add(asBytes);
            }

            payload.Add(new byte[] { 0 });

            var header = Miscellaneous.StructToBytes(fieldSizeProvider);
            var result = Miscellaneous.ConcatArrays(header, payload);

            return(result);
        }