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; } }
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; }
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); }
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)); } }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }