예제 #1
0
        public object Read(Object target, BlobReader reader)
        {
            if (from is ListSerializer || from is DictionarySerializer)
            {
                object value = Activator.CreateInstance(field.FieldType);
                field.SetValue(target, value);
                from.Read(value, reader);
            }
            else
            {
                field.SetValue(target, from.Read(target, reader));
            }

            return(null);
        }
예제 #2
0
        public object Read(Object target, BlobReader reader)
        {
            if (from is ListSerializer || from is DictionarySerializer)
            {
                object value = Activator.CreateInstance(prop.PropertyType);
                prop.SetValue(target, value, null);
                from.Read(value, reader);
            }
            else
            {
                prop.SetValue(target, from.Read(target, reader), null);
            }

            return(null);
        }
예제 #3
0
        public object Read(Object target, BlobReader reader)
        {
            object[] args = new object[2];

            using (reader = reader.ReadFieldBlob())
            {
                while (reader.CanTakeBytes(BlobReader.FieldHeaderLength))
                {
                    reader.ReadFieldHeader();

                    switch (Type.GetTypeCode(leftType))
                    {
                    case TypeCode.Int32:
                        args[0] = BitConverter.ToInt32(reader.ByteKey, 0);
                        break;

                    case TypeCode.String:
                        args[0] = Encoding.ASCII.GetString(reader.ByteKey, 0, reader.FieldKeyBytes);
                        break;

                    default:
                        throw new NotImplementedException();
                    }

                    args[1] = from.Read(target, reader);
                    add.Invoke(target, args);
                }

                reader.SkipSpare();
            }

            return(null);
        }
예제 #4
0
        public object Read(Object target, BlobReader reader)
        {
            object[] args = new object[1];

            using (reader = reader.ReadFieldBlob())
            {
                while (reader.CanTakeBytes(BlobReader.FieldHeaderLength))
                {
                    reader.ReadFieldHeader();

                    // if there are no data bytes, we can "probably" assume that the keys are the values
                    if (reader.FieldDataBytes > 0)
                    {
                        args[0] = from.Read(target, reader);
                    }
                    else
                    {
                        // only handles ints, refactor this probably
                        args[0] = BitConverter.ToInt32(reader.ByteKey, 0);
                    }

                    add.Invoke(target, args);
                }

                reader.SkipSpare();
            }
            return(null);
        }