Ejemplo n.º 1
0
        /// <summary>
        /// Initializes a new <see cref="StringEnumConverter{TEnum}"/>
        /// </summary>
        /// <param name="underlyingType">The underlying <see cref="Enum"/>'s type</param>
        /// <param name="jsonSerializerOptions">The current <see cref="Json.JsonSerializerOptions"/></param>
        public StringEnumConverter(Type underlyingType, JsonSerializerOptions jsonSerializerOptions)
        {
            this.UnderlyingType        = underlyingType;
            this.JsonSerializerOptions = jsonSerializerOptions;
            Array values = this.UnderlyingType.GetEnumValues();

            string[] names = this.UnderlyingType.GetEnumNames();
            this.TypeCode      = Type.GetTypeCode(this.UnderlyingType);
            this.IsFlags       = this.UnderlyingType.IsDefined(typeof(FlagsAttribute), true);
            this.ValueMappings = new Dictionary <ulong, EnumFieldMetadata>();
            this.NameMappings  = new Dictionary <string, EnumFieldMetadata>();
            for (int index = 0; index < values.Length; index++)
            {
                Enum                value               = (Enum)values.GetValue(index);
                ulong               rawValue            = this.GetRawValue(value);
                string              name                = names[index];
                FieldInfo           field               = this.UnderlyingType.GetField(name, BindingFlags.Default | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);
                EnumMemberAttribute enumMemberAttribute = field.GetCustomAttribute <EnumMemberAttribute>(true);
                string              transformedName     = enumMemberAttribute?.Value ?? this.JsonSerializerOptions?.PropertyNamingPolicy.ConvertName(name) ?? name;
                EnumFieldMetadata   fieldMetadata       = new EnumFieldMetadata(name, transformedName, value, rawValue);
                if (!this.ValueMappings.ContainsKey(rawValue))
                {
                    this.ValueMappings.Add(rawValue, fieldMetadata);
                }
                this.NameMappings.Add(transformedName, fieldMetadata);
            }
        }
Ejemplo n.º 2
0
 public FieldNodeViewModel(EnumFieldMetadata metadata)
 {
     Name = $"{metadata.Name} Value: {metadata.Value}";
     Kind = TypeKind.EnumField;
 }