Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
 public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType)
 {
     writer.Byte((byte)value);
 }