Exemplo n.º 1
0
        int IKeyDescriber.ToObject(byte[] buffer, int begin, out Type type)
        {
            int id;
            int count = Varint.BufferToNumber(buffer, begin, out id);

            type = _Get(id);
            return(count);
        }
Exemplo n.º 2
0
        int ITypeDescriber.ToObject(byte[] buffer, int begin, out object instance)
        {
            try
            {
                var constructor = _Type.GetConstructors().OrderBy(c => c.GetParameters().Length).Select(c => c).FirstOrDefault();
                if (constructor != null)
                {
                    var argTypes = constructor.GetParameters().Select(info => info.ParameterType).ToArray();
                    var objArgs  = new object[argTypes.Length];

                    for (int i = 0; i < argTypes.Length; i++)
                    {
                        objArgs[i] = Activator.CreateInstance(argTypes[i]);
                    }
                    instance = Activator.CreateInstance(_Type, objArgs);
                }
                else
                {
                    instance = Activator.CreateInstance(_Type);
                }



                var offset = begin;

                ulong validLength;
                offset += Varint.BufferToNumber(buffer, offset, out validLength);

                for (var i = 0ul; i < validLength; i++)
                {
                    ulong index;
                    offset += Varint.BufferToNumber(buffer, offset, out index);
                    Type valueType;
                    offset += _TypeSet.Get().ToObject(buffer, offset, out valueType);
                    var    filed     = _Fields[index];
                    var    describer = _TypeSet.Get(valueType);
                    object valueInstance;
                    offset += describer.ToObject(buffer, offset, out valueInstance);
                    filed.SetValue(instance, valueInstance);
                }

                return(offset - begin);
            }
            catch (Exception ex)
            {
                throw new DescriberException(typeof(ClassDescriber), _Type, "ToObject", ex);
            }
        }
Exemplo n.º 3
0
        int ITypeDescriber.ToObject(byte[] buffer, int begin, out object instnace)
        {
            try
            {
                var   offset = begin;
                ulong count;
                offset += Varint.BufferToNumber(buffer, offset, out count);
                var array = Activator.CreateInstance(_Type, (int)count) as IList;
                instnace = array;

                ulong validCount;
                offset += Varint.BufferToNumber(buffer, offset, out validCount);


                for (var i = 0UL; i < validCount; i++)
                {
                    var index = 0LU;

                    offset += Varint.BufferToNumber(buffer, offset, out index);

                    Type objType;
                    offset += _TypeSet.Get().ToObject(buffer, offset, out objType);
                    var    describer = _TypeSet.Get(objType);
                    object value;
                    offset += describer.ToObject(buffer, offset, out value);


                    array[(int)index] = value;
                }

                return(offset - begin);
            }
            catch (Exception ex)
            {
                throw new DescriberException(typeof(ArrayDescriber), _Type, "ToObject", ex);;
            }
        }