public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType) { var structType = value.GetType(); writer.Type(structType, defaultItemType); var rule = ByteUtils.GetRule(structType); if (rule != null) { rule.OnWriteInternal(writer, value); } else { var fields = usedFields.GetUnical(structType); if (fields == null) fields = ByteUtils.GetSerializeFields(structType); writer.Ushort((ushort)fields.Length); for (int i = 0; i < fields.Length; i++) { var field = fields[i]; writer.String(field.Name); writer.Complex(field.GetValue(value), null); } } }
public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType) { //Сохраняем данные в хеше, получаем объект который: //Если данные отсутствовали в хеше - возвращает текущую позицию //Если данные были в хеше - возвращает позицию, которая была при сохранении var objData = writer.SaveToClassHashtable(value); if (objData.definitionPosition == writer.position) { writer.Byte(IsDefinition); var classType = value.GetType(); writer.Type(classType, defaultItemType); var rule = ByteUtils.GetRule(classType); if (rule != null) { rule.OnWriteInternal(writer, value); } else { var fields = usedFields.GetUnical(classType); if (fields == null) fields = ByteUtils.GetSerializeFields(classType); writer.Ushort((ushort)fields.Length); for (int i = 0; i < fields.Length; i++) { var field = fields[i]; writer.String(field.Name); writer.Complex(field.GetValue(value), null); } } } else { writer.Byte(IsGoto); writer.Int(objData.definitionPosition); } }
public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType) { writer.Ushort((ushort)value); }