Exemple #1
0
 private static void EmiFieldOrPropertyCopyIL(ILGenerator generator, MethodInfo deepCopyMethod, FieldOrPropertyInfo member)
 {
     Debug.Assert(member.MemberInfo is FieldInfo || member.MemberInfo is PropertyInfo, "Field or property expected");
     if (member.ValueType.IsValueType || member.IsDefined(typeof(ShallowCopyAttribute), false))
     {
         // shallow copy - copy value by simple assignment
         generator.Emit(OpCodes.Ldarg_1);
         generator.Emit(OpCodes.Ldarg_0);
         if (member.MemberInfo is FieldInfo)
         {
             var field = (FieldInfo)member.MemberInfo;
             generator.Emit(OpCodes.Ldfld, field);
             generator.Emit(OpCodes.Stfld, field);
         }
         else
         {
             var property = (PropertyInfo)member.MemberInfo;
             generator.Emit(OpCodes.Call, property.GetGetMethod());
             generator.Emit(OpCodes.Call, property.GetSetMethod());
         }
     }
     else
     {
         // deep copy - call special method for obtaining a deep copy
         generator.Emit(OpCodes.Ldarg_1);
         generator.Emit(OpCodes.Ldarg_0);
         if (member.MemberInfo is FieldInfo)
             generator.Emit(OpCodes.Ldfld, (FieldInfo)member.MemberInfo);
         else
             generator.Emit(OpCodes.Call, ((PropertyInfo)member.MemberInfo).GetGetMethod());
         generator.Emit(OpCodes.Call, deepCopyMethod);
         if (member.MemberInfo is FieldInfo)
             generator.Emit(OpCodes.Stfld, (FieldInfo)member.MemberInfo);
         else
             generator.Emit(OpCodes.Call, ((PropertyInfo)member.MemberInfo).GetSetMethod());
     }
 }
Exemple #2
0
 private static Type GetLimitationAttribute(FieldOrPropertyInfo member, Type limitationAttribute)
 {
     var limitationSwitchAttribute = (LimitationSwitchAttribute)Attribute.GetCustomAttribute(member.MemberInfo, typeof(LimitationSwitchAttribute));
     if (limitationSwitchAttribute != null && limitationSwitchAttribute.From == limitationAttribute)
         return limitationSwitchAttribute.To;
     return limitationAttribute;
 }
 private static IEnumerable<Attribute> GetAttributes(FieldOrPropertyInfo member)
 {
     if (GetPropertyAttributes != null)
         foreach (var attr in GetPropertyAttributes(member)) yield return attr;
     yield return new CategoryAttribute(member.DeclaringType.Name);
     foreach (var attr in member.GetCustomAttributes(false).Cast<Attribute>()) yield return attr;
 }
Exemple #4
0
 public static string GetSerializedName(FieldOrPropertyInfo member)
 {
     var serializedNameAttribute = (SerializedNameAttribute)Attribute.GetCustomAttribute(member.MemberInfo, typeof(SerializedNameAttribute));
     var name = new StringBuilder(serializedNameAttribute != null ? serializedNameAttribute.SerializedName : member.Name);
     if (name[0] == '_') name.Remove(0, 1);
     name[0] = char.ToLower(name[0]);
     return name.ToString();
 }
 public GobPropertyDescriptor(FieldOrPropertyInfo field)
     : base(BeautifyFieldName(field.Name), GetAttributes(field).ToArray())
 {
     _member = field;
 }