internal virtual void WriteBytes(ByteWriter writer) { foreach (var field in GetType().GetFields(BindingFlags.Public | BindingFlags.Instance)) { var type = field.FieldType; var value = field.GetValue(this); if (value == null) { throw new Exception($"Field is null: {type}.{field.Name}"); } if (value.GetType() != type) { throw new Exception($"Value type [{value.GetType()}] differs from field type [{type}] in field: {type}.{field.Name}."); } if (value is DataNode) { (value as DataNode).WriteBytes(writer); } else { var serializer = CustomSerializer.Get(type); serializer.WriteBytes(value, writer); } } }
internal override void ReadBytes(ByteReader reader) { if (serializer == null) { serializer = CustomSerializer.Get <T>(); } Value = (T)serializer.ReadBytes(reader); }
internal override void WriteBytes(ByteWriter writer) { if (serializer == null) { serializer = CustomSerializer.Get <T>(); } serializer.WriteBytes(Value, writer); }
internal override void WriteBytes(ByteWriter writer) { if (keySerializer == null) { keySerializer = CustomSerializer.Get <K>(); } writer.WriteInt(Count); foreach (var pair in nodes) { keySerializer.WriteBytes(pair.Key, writer); pair.Value.WriteBytes(writer); } }
internal override void ReadBytes(ByteReader reader) { if (keySerializer == null) { keySerializer = CustomSerializer.Get <K>(); } Clear(); int count = reader.ReadInt(); for (int i = 0; i < count; ++i) { var key = (K)keySerializer.ReadBytes(reader); var value = Add(key, false); value.ReadBytes(reader); } }