コード例 #1
0
        public override void Write(Writer writer, T obj)
        {
            if (!obj.CanRead)
            {
                throw new IOException("This stream can't support serialize.");
            }
            base.Write(writer, obj);
            var  stream = writer.Stream;
            long oldPos = 0;

            if (obj.CanSeek)
            {
                oldPos       = obj.Position;
                obj.Position = 0;
            }
            stream.WriteByte(TagBytes);
            int length = (int)obj.Length;

            if (length > 0)
            {
                ValueWriter.WriteInt(stream, length);
            }
            stream.WriteByte(TagQuote);
            obj.CopyTo(stream);
            stream.WriteByte(TagQuote);
            if (obj.CanSeek)
            {
                obj.Position = oldPos;
            }
        }
コード例 #2
0
        public override void Write(Writer writer, T obj)
        {
            if (!obj.CanRead || !obj.CanSeek)
            {
                throw new IOException("This stream can't support serialize.");
            }
            base.Write(writer, obj);
            var  stream = writer.Stream;
            long oldPos = obj.Position;

            obj.Position = 0;
            stream.WriteByte(TagBytes);
            int length = (int)obj.Length;

            if (length > 0)
            {
                ValueWriter.WriteInt(stream, length);
            }
            stream.WriteByte(TagQuote);
#if !NET35
            obj.CopyTo(stream);
#else
            byte[] array = new byte[length > 81920 ? 81920 : length];
            int    count;
            while ((count = obj.Read(array, 0, array.Length)) != 0)
            {
                stream.Write(array, 0, count);
            }
#endif
            stream.WriteByte(TagQuote);
            obj.Position = oldPos;
        }
コード例 #3
0
        public override void Write(Writer writer, T[,] obj)
        {
            base.Write(writer, obj);
            var stream  = writer.Stream;
            int length  = obj.GetLength(0);
            int length2 = obj.GetLength(1);

            stream.WriteByte(TagList);
            if (length > 0)
            {
                ValueWriter.WriteInt(stream, length);
            }
            stream.WriteByte(TagOpenbrace);
            var serializer = Serializer <T> .Instance;

            for (int i = 0; i < length; ++i)
            {
                writer.AddReferenceCount(1);
                stream.WriteByte(TagList);
                if (length2 > 0)
                {
                    ValueWriter.WriteInt(stream, length2);
                }
                stream.WriteByte(TagOpenbrace);
                for (int j = 0; j < length2; ++j)
                {
                    serializer.Serialize(writer, obj[i, j]);
                }
                stream.WriteByte(TagClosebrace);
            }
            stream.WriteByte(TagClosebrace);
        }
コード例 #4
0
 private string WriteInt(int i)
 {
     using (var stream = new MemoryStream()) {
         ValueWriter.WriteInt(stream, i);
         var data = stream.GetArraySegment();
         return(Encoding.ASCII.GetString(data.Array, data.Offset, data.Count));
     }
 }
コード例 #5
0
        public override void Write(Writer writer, T obj)
        {
            base.Write(writer, obj);
            var stream = writer.Stream;

            stream.WriteByte(TagList);
            ValueWriter.WriteInt(stream, TupleHelper <T> .length);
            stream.WriteByte(TagOpenbrace);
            TupleHelper <T> .write(writer, obj);

            stream.WriteByte(TagClosebrace);
        }
コード例 #6
0
        public override void Write(Writer writer, T obj)
        {
            base.Write(writer, obj);
            var rows   = obj.Rows;
            var length = rows.Count;
            var stream = writer.Stream;

            stream.WriteByte(TagList);
            if (length == 0)
            {
                stream.WriteByte(TagOpenbrace);
                stream.WriteByte(TagClosebrace);
                return;
            }
            ValueWriter.WriteInt(stream, length);
            stream.WriteByte(TagOpenbrace);
            var columns = obj.Columns;
            int count   = columns.Count;
            int r       = writer.WriteClass(columns, () => {
                stream.WriteByte(TagClass);
                ValueWriter.Write(stream, obj.TableName);
                ValueWriter.Write(stream, count);
                stream.WriteByte(TagOpenbrace);
                var strSerializer = Serializer <string> .Instance;
                for (int i = 0; i < count; ++i)
                {
                    strSerializer.Serialize(writer, Accessor.UnifiedName(columns[i].ColumnName));
                }
                stream.WriteByte(TagClosebrace);
            });
            var serializer = Serializer.Instance;

            for (int i = 0; i < length; ++i)
            {
                writer.AddReferenceCount(1);
                stream.WriteByte(TagObject);
                ValueWriter.WriteInt(stream, r);
                stream.WriteByte(TagOpenbrace);
                if (count > 0)
                {
                    var row = rows[i];
                    for (int j = 0; j < count; ++j)
                    {
                        serializer.Serialize(writer, row[j]);
                    }
                }
                stream.WriteByte(TagClosebrace);
            }
            stream.WriteByte(TagClosebrace);
        }
コード例 #7
0
        public override void Write(Writer writer, byte[] obj)
        {
            base.Write(writer, obj);
            var stream = writer.Stream;

            stream.WriteByte(TagBytes);
            int length = obj.Length;

            if (length > 0)
            {
                ValueWriter.WriteInt(stream, length);
            }
            stream.WriteByte(TagQuote);
            stream.Write(obj, 0, length);
            stream.WriteByte(TagQuote);
        }
コード例 #8
0
        public override void Write(Writer writer, T obj)
        {
            base.Write(writer, obj);
            var stream = writer.Stream;

            stream.WriteByte(TagMap);
            if (length > 0)
            {
                ValueWriter.WriteInt(stream, length);
            }
            stream.WriteByte(TagOpenbrace);
            if (length > 0)
            {
                write(writer, obj);
            }
            stream.WriteByte(TagClosebrace);
        }
コード例 #9
0
        public override void Write(Writer writer, T obj)
        {
            base.Write(writer, obj);
            var tables = obj.Tables;
            var length = tables.Count;
            var stream = writer.Stream;

            stream.WriteByte(TagList);
            if (length > 0)
            {
                ValueWriter.WriteInt(stream, length);
            }
            stream.WriteByte(TagOpenbrace);
            for (int i = 0; i < length; ++i)
            {
                Serializer <DataTable> .Instance.Serialize(writer, tables[i]);
            }
            stream.WriteByte(TagClosebrace);
        }
コード例 #10
0
        public override void Write(Writer writer, ArraySegment <T> obj)
        {
            base.Write(writer, obj);
            var stream = writer.Stream;
            int length = obj.Count;

            stream.WriteByte(TagList);
            if (length > 0)
            {
                ValueWriter.WriteInt(stream, length);
            }
            stream.WriteByte(TagOpenbrace);
            var serializer = Serializer <T> .Instance;

            for (int i = obj.Offset, n = obj.Offset + length; i < n; ++i)
            {
                serializer.Serialize(writer, obj.Array[i]);
            }
            stream.WriteByte(TagClosebrace);
        }
コード例 #11
0
        public override void Write(Writer writer, T obj)
        {
            base.Write(writer, obj);
            var stream = writer.Stream;
            int length = obj.Count;

            stream.WriteByte(TagList);
            if (length > 0)
            {
                ValueWriter.WriteInt(stream, length);
            }
            stream.WriteByte(TagOpenbrace);
            var serializer = Serializer <V> .Instance;

            foreach (V value in obj)
            {
                serializer.Serialize(writer, value);
            }
            stream.WriteByte(TagClosebrace);
        }
コード例 #12
0
        public override void Write(Writer writer, BitArray obj)
        {
            base.Write(writer, obj);
            var stream = writer.Stream;
            int length = obj.Length;

            stream.WriteByte(TagList);
            if (length > 0)
            {
                ValueWriter.WriteInt(stream, length);
            }
            stream.WriteByte(TagOpenbrace);
            var serializer = Serializer <bool> .Instance;

            for (int i = 0; i < length; ++i)
            {
                serializer.Serialize(writer, obj[i]);
            }
            stream.WriteByte(TagClosebrace);
        }
コード例 #13
0
        public override void Write(Writer writer, T obj)
        {
            base.Write(writer, obj);
            var stream = writer.Stream;
            int length = obj.Count;

            stream.WriteByte(TagMap);
            if (length > 0)
            {
                ValueWriter.WriteInt(stream, length);
            }
            stream.WriteByte(TagOpenbrace);
            var serializerK = Serializer <K> .Instance;
            var serializerV = Serializer <V> .Instance;

            foreach (var pair in obj)
            {
                serializerK.Serialize(writer, pair.Key);
                serializerV.Serialize(writer, pair.Value);
            }
            stream.WriteByte(TagClosebrace);
        }
コード例 #14
0
        public override void Write(Writer writer, T obj)
        {
            MembersWriter membersWriter = MembersWriter.GetMembersWriter <T>(writer.Mode);
            int           count         = membersWriter.count;
            var           stream        = writer.Stream;
            var           type          = typeof(T);
            int           r             = writer.WriteClass(type, () => {
                var data = membersWriter.data;
                stream.Write(data, 0, data.Length);
                writer.AddReferenceCount(count);
            });

            base.Write(writer, obj);
            stream.WriteByte(TagObject);
            ValueWriter.WriteInt(stream, r);
            stream.WriteByte(TagOpenbrace);
            if (count > 0)
            {
                ((Action <Writer, T>)(membersWriter.write))(writer, obj);
            }
            stream.WriteByte(TagClosebrace);
        }
コード例 #15
0
        public override void Write(Writer writer, ExpandoObject obj)
        {
            base.Write(writer, obj);
            var stream = writer.Stream;
            var dict   = (IDictionary <string, object>)obj;
            int length = dict.Count;

            stream.WriteByte(TagMap);
            if (length > 0)
            {
                ValueWriter.WriteInt(stream, length);
            }
            stream.WriteByte(TagOpenbrace);
            var strSerializer = StringSerializer.Instance;
            var serializer    = Serializer.Instance;

            foreach (var pair in dict)
            {
                strSerializer.Serialize(writer, Accessor.UnifiedName(pair.Key));
                serializer.Serialize(writer, pair.Value);
            }
            stream.WriteByte(TagClosebrace);
        }
コード例 #16
0
        public override void Write(Writer writer, T obj)
        {
            base.Write(writer, obj);
            Array array = (Array)(object)obj;
            int   rank  = array.Rank;
            int   i;

#if NETSTANDARD2_1 || NETCOREAPP2_1_UP
            Span <int> lb  = stackalloc int[rank];
            Span <int> ub  = stackalloc int[rank];
            Span <int> len = stackalloc int[rank];
#else
            int[] lb  = new int[rank];
            int[] ub  = new int[rank];
            int[] len = new int[rank];
#endif
            int[] loc     = new int[rank];
            int   maxrank = rank - 1;
            for (i = 0; i < rank; ++i)
            {
                lb[i]  = array.GetLowerBound(i);
                ub[i]  = array.GetUpperBound(i);
                len[i] = array.GetLength(i);
                loc[i] = lb[i];
            }
            var stream = writer.Stream;
            stream.WriteByte(TagList);
            if (len[0] > 0)
            {
                ValueWriter.WriteInt(stream, len[0]);
            }
            stream.WriteByte(TagOpenbrace);
            var serializer = Serializer.Instance;
            while (loc[0] <= ub[0])
            {
                int n = 0;
                for (i = maxrank; i > 0; i--)
                {
                    if (loc[i] == lb[i])
                    {
                        n++;
                    }
                    else
                    {
                        break;
                    }
                }
                for (i = rank - n; i < rank; ++i)
                {
                    writer.AddReferenceCount(1);
                    stream.WriteByte(TagList);
                    if (len[i] > 0)
                    {
                        ValueWriter.WriteInt(stream, len[i]);
                    }
                    stream.WriteByte(TagOpenbrace);
                }
                for (loc[maxrank] = lb[maxrank];
                     loc[maxrank] <= ub[maxrank];
                     loc[maxrank]++)
                {
                    serializer.Serialize(writer, array.GetValue(loc));
                }
                for (i = maxrank; i > 0; i--)
                {
                    if (loc[i] > ub[i])
                    {
                        loc[i] = lb[i];
                        loc[i - 1]++;
                        stream.WriteByte(TagClosebrace);
                    }
                }
            }
            stream.WriteByte(TagClosebrace);
        }