/// <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)); }
/// <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) }); }