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); }
public override void Write(Writer writer, T obj) { // No reference to exception writer.AddReferenceCount(1); var stream = writer.Stream; stream.WriteByte(TagError); stream.WriteByte(TagString); ValueWriter.Write(stream, obj.Message); }
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, 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, 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); }