Пример #1
0
        /// <summary>
        /// 添加字段
        /// </summary>
        /// <param name="field">字段信息</param>
        public void Push(FieldSize field)
        {
            Type fieldType = field.Field.FieldType;

            generator.Emit(OpCodes.Ldarg_0);
            if (field.Field.IsStatic)
            {
                LocalBuilder staticMember = generator.DeclareLocal(fieldType);
                generator.initobj(fieldType, staticMember);
                generator.Emit(OpCodes.Ldloca, staticMember);
            }
            else
            {
                generator.Emit(OpCodes.Ldarg_1);
                if (!isValueType)
                {
                    generator.Emit(OpCodes.Ldind_Ref);
                }
                generator.Emit(OpCodes.Ldflda, field.Field);
            }
            generator.call(DeSerializer.GetMemberDeSerializeMethod(fieldType) ?? DeSerializeMethodCache.GetMember(fieldType));
        }
Пример #2
0
 /// <summary>
 /// 设置字段信息
 /// </summary>
 /// <param name="field"></param>
 internal void Set(FieldSize field)
 {
     Field             = field.Field;
     MemberIndex       = field.MemberIndex;
     DeSerializeMethod = (Func <DeSerializer, object, object>) typeof(AutoCSer.Reflection.InvokeMethodRef2 <,>).MakeGenericType(typeof(DeSerializer), Field.FieldType).GetMethod("getTypeObjectReturn", BindingFlags.Static | BindingFlags.NonPublic).Invoke(null, new object[] { DeSerializer.GetMemberDeSerializeMethod(Field.FieldType) ?? DeSerializeMethodCache.GetMember(Field.FieldType) });
 }