/// <summary> /// Determines <see cref="EnumSerializationMethod"/> for the target. /// </summary> /// <param name="context">Context information.</param> /// <param name="enumType">The target enum type.</param> /// <param name="enumMemberSerializationMethod">The method argued by the member.</param> /// <returns>Determined <see cref="EnumSerializationMethod"/> for the target.</returns> public static EnumSerializationMethod DetermineEnumSerializationMethod( SerializationContext context, Type enumType, EnumMemberSerializationMethod enumMemberSerializationMethod ) { EnumSerializationMethod method = context.EnumSerializationMethod; switch ( enumMemberSerializationMethod ) { case EnumMemberSerializationMethod.ByName: { method = EnumSerializationMethod.ByName; break; } case EnumMemberSerializationMethod.ByUnderlyingValue: { method = EnumSerializationMethod.ByUnderlyingValue; break; } default: { var attributesOnType = enumType.GetCustomAttributes( typeof( MessagePackEnumAttribute ), false ); if ( attributesOnType.Length > 0 ) { // ReSharper disable once PossibleNullReferenceException method = ( attributesOnType[ 0 ] as MessagePackEnumAttribute ).SerializationMethod; } break; } } return method; }
public static EnumSerializationMethod DetermineEnumSerializationMethod( SerializationContext context, Type enumType, EnumMemberSerializationMethod enumMemberSerializationMethod ) { if ( context == null ) { throw new ArgumentNullException( "context" ); } if ( enumType == null ) { throw new ArgumentNullException( "enumType" ); } EnumSerializationMethod method = context.EnumSerializationMethod; switch ( enumMemberSerializationMethod ) { case EnumMemberSerializationMethod.ByName: { method = EnumSerializationMethod.ByName; break; } case EnumMemberSerializationMethod.ByUnderlyingValue: { method = EnumSerializationMethod.ByUnderlyingValue; break; } default: { #if NETFX_CORE var messagePackEnumAttribute = enumType.GetTypeInfo().GetCustomAttribute<MessagePackEnumAttribute>(); if ( messagePackEnumAttribute != null) { method = messagePackEnumAttribute.SerializationMethod; #else var messagePackEnumAttributes = enumType.GetCustomAttributes( typeof( MessagePackEnumAttribute ), true ); if ( messagePackEnumAttributes.Length > 0 ) { // ReSharper disable once PossibleNullReferenceException method = ( messagePackEnumAttributes[ 0 ] as MessagePackEnumAttribute ).SerializationMethod; #endif // NETFX_CORE } break; } } return method; } }