private static BidirectionalDictionary <string, string> InitializeEnumType(Type type) { BidirectionalDictionary <string, string> map = new BidirectionalDictionary <string, string>( StringComparer.OrdinalIgnoreCase, StringComparer.OrdinalIgnoreCase); foreach (FieldInfo f in type.GetFields()) { string n1 = f.Name; string n2; #if !NET20 n2 = f.GetCustomAttributes(typeof(EnumMemberAttribute), true) .Cast <EnumMemberAttribute>() .Select(a => a.Value) .SingleOrDefault() ?? f.Name; #else n2 = f.Name; #endif string s; if (map.TryGetBySecond(n2, out s)) { throw new InvalidOperationException("Enum name '{0}' already exists on enum '{1}'.".FormatWith(CultureInfo.InvariantCulture, n2, type.Name)); } map.Set(n1, n2); } return(map); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { Type type = (ReflectionUtils.IsNullableType(objectType) ? Nullable.GetUnderlyingType(objectType) : objectType); if (reader.TokenType == JsonToken.Null) { if (!ReflectionUtils.IsNullableType(objectType)) { throw new Exception("Cannot convert null value to {0}.".FormatWith(CultureInfo.InvariantCulture, objectType)); } return(null); } if (reader.TokenType == JsonToken.String) { BidirectionalDictionary <string, string> enumNameMap = GetEnumNameMap(type); enumNameMap.TryGetBySecond(reader.Value.ToString(), out var first); first = first ?? reader.Value.ToString(); return(Enum.Parse(type, first, ignoreCase: true)); } if (reader.TokenType == JsonToken.Integer) { return(ConvertUtils.ConvertOrCast(reader.Value, CultureInfo.InvariantCulture, type)); } throw new Exception("Unexpected token when parsing enum. Expected String or Integer, got {0}.".FormatWith(CultureInfo.InvariantCulture, reader.TokenType)); }
public BidirectionalDictionary <string, string> InitializeEnumType(Type type) { BidirectionalDictionary <string, string> map = XStandardCollections.Api.BidirectionalDictionaries.New <string, string>(StringComparer.Ordinal, StringComparer.Ordinal); foreach (FieldInfo f in type.GetFields(BindingFlags.Public | BindingFlags.Static)) { string n1 = f.Name; string n2; #if HAVE_DATA_CONTRACTS n2 = f.GetCustomAttributes(typeof(EnumMemberAttribute), true) .Cast <EnumMemberAttribute>() .Select(a => a.Value) .SingleOrDefault() ?? f.Name; #else n2 = f.Name; #endif string s; if (map.TryGetBySecond(n2, out s)) { throw new InvalidOperationException("Enum name '{0}' already exists on enum '{1}'.".FormatWith(CultureInfo.InvariantCulture, n2, type.Name)); } map.Set(n1, n2); } return(map); }
private BidirectionalDictionary <string, string> GetEnumNameMap(Type t) { BidirectionalDictionary <string, string> bidirectionalDictionary; if (!this._enumMemberNamesPerType.TryGetValue(t, out bidirectionalDictionary)) { lock (this._enumMemberNamesPerType) { if (this._enumMemberNamesPerType.TryGetValue(t, out bidirectionalDictionary)) { return(bidirectionalDictionary); } bidirectionalDictionary = new BidirectionalDictionary <string, string>(StringComparer.OrdinalIgnoreCase, StringComparer.OrdinalIgnoreCase); FieldInfo[] fields = t.GetFields(); for (int i = 0; i < fields.Length; i++) { FieldInfo fieldInfo = fields[i]; string name = fieldInfo.Name; string text = (from EnumMemberAttribute a in fieldInfo.GetCustomAttributes(typeof(EnumMemberAttribute), true) select a.Value).SingleOrDefault <string>() ?? fieldInfo.Name; string text2; if (bidirectionalDictionary.TryGetBySecond(text, out text2)) { throw new InvalidOperationException("Enum name '{0}' already exists on enum '{1}'.".FormatWith(CultureInfo.InvariantCulture, text, t.Name)); } bidirectionalDictionary.Set(name, text); } this._enumMemberNamesPerType[t] = bidirectionalDictionary; } return(bidirectionalDictionary); } return(bidirectionalDictionary); }
private BidirectionalDictionary <string, string> GetEnumNameMap(Type t) { BidirectionalDictionary <string, string> bidirectionalDictionary; if (!this._enumMemberNamesPerType.TryGetValue(t, out bidirectionalDictionary)) { lock (this._enumMemberNamesPerType) { if (this._enumMemberNamesPerType.TryGetValue(t, out bidirectionalDictionary)) { return(bidirectionalDictionary); } bidirectionalDictionary = new BidirectionalDictionary <string, string>((IEqualityComparer <string>)StringComparer.OrdinalIgnoreCase, (IEqualityComparer <string>)StringComparer.OrdinalIgnoreCase); foreach (FieldInfo item_0 in t.GetFields()) { string local_2 = item_0.Name; string local_3 = item_0.Name; string local_4; if (bidirectionalDictionary.TryGetBySecond(local_3, out local_4)) { throw new InvalidOperationException(StringUtils.FormatWith("Enum name '{0}' already exists on enum '{1}'.", (IFormatProvider)CultureInfo.InvariantCulture, (object)local_3, (object)t.Name)); } bidirectionalDictionary.Set(local_2, local_3); } this._enumMemberNamesPerType[t] = bidirectionalDictionary; } } return(bidirectionalDictionary); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { string str; Type type = (!ReflectionUtils.IsNullableType(objectType) ? objectType : Nullable.GetUnderlyingType(objectType)); if (reader.TokenType == JsonToken.Null) { if (!ReflectionUtils.IsNullableType(objectType)) { throw new Exception("Cannot convert null value to {0}.".FormatWith(CultureInfo.InvariantCulture, new object[] { objectType })); } return(null); } if (reader.TokenType != JsonToken.String) { if (reader.TokenType != JsonToken.Integer) { throw new Exception("Unexpected token when parsing enum. Expected String or Integer, got {0}.".FormatWith(CultureInfo.InvariantCulture, new object[] { reader.TokenType })); } return(ConvertUtils.ConvertOrCast(reader.Value, CultureInfo.InvariantCulture, type)); } BidirectionalDictionary <string, string> enumNameMap = this.GetEnumNameMap(type); enumNameMap.TryGetBySecond(reader.Value.ToString(), out str); str = str ?? reader.Value.ToString(); return(Enum.Parse(type, str, true)); }
private BidirectionalDictionary <string, string> GetEnumNameMap(Type t) { if (!_enumMemberNamesPerType.TryGetValue(t, out BidirectionalDictionary <string, string> value)) { lock (_enumMemberNamesPerType) { if (_enumMemberNamesPerType.TryGetValue(t, out value)) { return(value); } value = new BidirectionalDictionary <string, string>(StringComparer.OrdinalIgnoreCase, StringComparer.OrdinalIgnoreCase); FieldInfo[] fields = t.GetFields(); foreach (FieldInfo fieldInfo in fields) { string name = fieldInfo.Name; string text = (from EnumMemberAttribute a in fieldInfo.GetCustomAttributes(typeof(EnumMemberAttribute), inherit: true) select a.Value).SingleOrDefault() ?? fieldInfo.Name; if (value.TryGetBySecond(text, out string _)) { throw new Exception("Enum name '{0}' already exists on enum '{1}'.".FormatWith(CultureInfo.InvariantCulture, text, t.Name)); } value.Add(name, text); } _enumMemberNamesPerType[t] = value; return(value); } } return(value); }
private static string ResolvedEnumName(BidirectionalDictionary <string, string> map, string enumText) { string text; map.TryGetBySecond(enumText, out text); text = (text ?? enumText); return(text); }
private static string ResolvedEnumName(BidirectionalDictionary <string, string> map, string enumText) { string resolvedEnumName; map.TryGetBySecond(enumText, out resolvedEnumName); resolvedEnumName = resolvedEnumName ?? enumText; return(resolvedEnumName); }
private bool TryResolvedEnumName(BidirectionalDictionary <string, string> map, string enumText, out string resolvedEnumName) { if (map.TryGetBySecond(enumText, out resolvedEnumName)) { return(true); } resolvedEnumName = null; return(false); }
public string GetReference(object context, object value) { BidirectionalDictionary <string, object> mappings = this.GetMappings(context); if (!mappings.TryGetBySecond(value, out string str)) { this._referenceCount++; str = this._referenceCount.ToString(CultureInfo.InvariantCulture); mappings.Set(str, value); } return(str); }
public string GetReference(object context, object value) { BidirectionalDictionary <string, object> mappings = GetMappings(context); if (!mappings.TryGetBySecond(value, out var first)) { _referenceCount++; first = _referenceCount.ToString(CultureInfo.InvariantCulture); mappings.Add(first, value); } return(first); }
public string GetReference(object context, object value) { BidirectionalDictionary <string, object> mappings = this.GetMappings(context); string first; if (!mappings.TryGetBySecond(value, out first)) { ++this._referenceCount; first = this._referenceCount.ToString((IFormatProvider)CultureInfo.InvariantCulture); mappings.Set(first, value); } return(first); }
public string GetReference(object context, object value) { BidirectionalDictionary <string, object> mappings = this.GetMappings(context); string text; if (!mappings.TryGetBySecond(value, out text)) { this._referenceCount++; text = this._referenceCount.ToString(CultureInfo.get_InvariantCulture()); mappings.Add(text, value); } return(text); }
public string GetReference(object context, object value) { BidirectionalDictionary <string, object> mappings = GetMappings(context); string reference; if (!mappings.TryGetBySecond(value, out reference)) { _referenceCount++; reference = _referenceCount.ToString(CultureInfo.InvariantCulture); mappings.Set(reference, value); } return(reference); }
/// <summary> /// A cached representation of the Enum string representation to respect per Enum field name. /// </summary> /// <param name="t">The type of the Enum.</param> /// <returns>A map of enum field name to either the field name, or the configured enum member name (<see cref="EnumMemberAttribute"/>).</returns> private BidirectionalDictionary <string, string> GetEnumNameMap(Type t) { BidirectionalDictionary <string, string> map; if (!_enumMemberNamesPerType.TryGetValue(t, out map)) { lock (_enumMemberNamesPerType) { if (_enumMemberNamesPerType.TryGetValue(t, out map)) { return(map); } map = new BidirectionalDictionary <string, string>( StringComparer.OrdinalIgnoreCase, StringComparer.OrdinalIgnoreCase); foreach (FieldInfo f in t.GetFields()) { string n1 = f.Name; string n2; #if !NET20 n2 = f.GetCustomAttributes(typeof(EnumMemberAttribute), true) .Cast <EnumMemberAttribute>() .Select(a => a.Value) .SingleOrDefault() ?? f.Name; #else n2 = f.Name; #endif string s; if (map.TryGetBySecond(n2, out s)) { throw new Exception("Enum name '{0}' already exists on enum '{1}'." .FormatWith(CultureInfo.InvariantCulture, n2, t.Name)); } map.Add(n1, n2); } _enumMemberNamesPerType[t] = map; } } return(map); }
private BidirectionalDictionary <string, string> GetEnumNameMap(Type t) { BidirectionalDictionary <string, string> bidirectionalDictionary; BidirectionalDictionary <string, string> bidirectionalDictionary1; string str; if (!this._enumMemberNamesPerType.TryGetValue(t, out bidirectionalDictionary)) { object obj = this._enumMemberNamesPerType; Monitor.Enter(obj); try { if (!this._enumMemberNamesPerType.TryGetValue(t, out bidirectionalDictionary)) { bidirectionalDictionary = new BidirectionalDictionary <string, string>(StringComparer.OrdinalIgnoreCase, StringComparer.OrdinalIgnoreCase); FieldInfo[] fields = t.GetFields(); for (int i = 0; i < (int)fields.Length; i++) { FieldInfo fieldInfo = fields[i]; string name = fieldInfo.Name; string str1 = ( from EnumMemberAttribute a in fieldInfo.GetCustomAttributes(typeof(EnumMemberAttribute), true) select a.Value).SingleOrDefault <string>() ?? fieldInfo.Name; if (bidirectionalDictionary.TryGetBySecond(str1, out str)) { throw new Exception("Enum name '{0}' already exists on enum '{1}'.".FormatWith(CultureInfo.InvariantCulture, new object[] { str1, t.Name })); } bidirectionalDictionary.Add(name, str1); } this._enumMemberNamesPerType[t] = bidirectionalDictionary; return(bidirectionalDictionary); } else { bidirectionalDictionary1 = bidirectionalDictionary; } } finally { Monitor.Exit(obj); } return(bidirectionalDictionary1); } return(bidirectionalDictionary); }
/// <summary> /// A cached representation of the Enum string representation to respect per Enum field name. /// </summary> /// <param name="t">The type of the Enum.</param> /// <returns>A map of enum field name to either the field name, or the configured enum member name (<see cref="EnumMemberAttribute"/>).</returns> private BidirectionalDictionary <string, string> GetEnumNameMap(Type t) { BidirectionalDictionary <string, string> map; if (!_enumMemberNamesPerType.TryGetValue(t, out map)) { lock (_enumMemberNamesPerType) { if (_enumMemberNamesPerType.TryGetValue(t, out map)) { return(map); } map = new BidirectionalDictionary <string, string>( StringComparer.OrdinalIgnoreCase, StringComparer.OrdinalIgnoreCase); foreach (FieldInfo f in t.GetFields()) { string n1 = f.Name; string n2; n2 = f.Name; string s; if (map.TryGetBySecond(n2, out s)) { throw new Exception("Enum name '{0}' already exists on enum '{1}'." .FormatWith(CultureInfo.InvariantCulture, n2, t.Name)); } map.Add(n1, n2); } _enumMemberNamesPerType[t] = map; } } return(map); }
private BidirectionalDictionary <string, string> GetEnumNameMap(Type t) { BidirectionalDictionary <string, string> bidirectionalDictionary; if (!this._enumMemberNamesPerType.TryGetValue(t, ref bidirectionalDictionary)) { Dictionary <Type, BidirectionalDictionary <string, string> > enumMemberNamesPerType = this._enumMemberNamesPerType; lock (enumMemberNamesPerType) { if (this._enumMemberNamesPerType.TryGetValue(t, ref bidirectionalDictionary)) { return(bidirectionalDictionary); } bidirectionalDictionary = new BidirectionalDictionary <string, string>(StringComparer.get_OrdinalIgnoreCase(), StringComparer.get_OrdinalIgnoreCase()); FieldInfo[] fields = t.GetFields(); for (int i = 0; i < fields.Length; i++) { FieldInfo fieldInfo = fields[i]; string name = fieldInfo.get_Name(); string text = Enumerable.SingleOrDefault <string>(Enumerable.Select <EnumMemberAttribute, string>(Enumerable.Cast <EnumMemberAttribute>(fieldInfo.GetCustomAttributes(typeof(EnumMemberAttribute), true)), (EnumMemberAttribute a) => a.Value)) ?? fieldInfo.get_Name(); string text2; if (bidirectionalDictionary.TryGetBySecond(text, out text2)) { throw new Exception("Enum name '{0}' already exists on enum '{1}'.".FormatWith(CultureInfo.get_InvariantCulture(), new object[] { text, t.get_Name() })); } bidirectionalDictionary.Add(name, text); } this._enumMemberNamesPerType.set_Item(t, bidirectionalDictionary); } return(bidirectionalDictionary); } return(bidirectionalDictionary); }
private BidirectionalDictionary <string, string> GetEnumNameMap(Type t) { BidirectionalDictionary <string, string> bidirectionalDictionary; if (!this._enumMemberNamesPerType.TryGetValue(t, out bidirectionalDictionary)) { object enumMemberNamesPerType = this._enumMemberNamesPerType; lock (enumMemberNamesPerType) { if (this._enumMemberNamesPerType.TryGetValue(t, out bidirectionalDictionary)) { return(bidirectionalDictionary); } bidirectionalDictionary = new BidirectionalDictionary <string, string>(StringComparer.OrdinalIgnoreCase, StringComparer.OrdinalIgnoreCase); foreach (FieldInfo fieldInfo in t.GetFields()) { string name = fieldInfo.Name; string text = (from EnumMemberAttribute a in fieldInfo.GetCustomAttributes(typeof(EnumMemberAttribute), true) select a.Value).SingleOrDefault <string>() ?? fieldInfo.Name; string text2; if (bidirectionalDictionary.TryGetBySecond(text, out text2)) { throw new Exception("Enum name '{0}' already exists on enum '{1}'.".FormatWith(CultureInfo.InvariantCulture, new object[] { text, t.Name })); } bidirectionalDictionary.Add(name, text); } this._enumMemberNamesPerType[t] = bidirectionalDictionary; } return(bidirectionalDictionary); } return(bidirectionalDictionary); }
/// <summary> /// A cached representation of the Enum string representation to respect per Enum field name. /// </summary> /// <param name="t">The type of the Enum.</param> /// <returns>A map of enum field name to either the field name, or the configured enum member name (<see cref="EnumMemberAttribute"/>).</returns> private BidirectionalDictionary<string, string> GetEnumNameMap(Type t) { BidirectionalDictionary<string, string> map; if (!_enumMemberNamesPerType.TryGetValue(t, out map)) { lock (_enumMemberNamesPerType) { if (_enumMemberNamesPerType.TryGetValue(t, out map)) return map; map = new BidirectionalDictionary<string, string>( StringComparer.OrdinalIgnoreCase, StringComparer.OrdinalIgnoreCase); foreach (FieldInfo f in t.GetFields()) { string n1 = f.Name; string n2; #if !NET20 n2 = f.GetCustomAttributes(typeof (EnumMemberAttribute), true) .Cast<EnumMemberAttribute>() .Select(a => a.Value) .SingleOrDefault() ?? f.Name; #else n2 = f.Name; #endif string s; if (map.TryGetBySecond(n2, out s)) { throw new InvalidOperationException("Enum name '{0}' already exists on enum '{1}'." .FormatWith(CultureInfo.InvariantCulture, n2, t.Name)); } map.Set(n1, n2); } _enumMemberNamesPerType[t] = map; } } return map; }
private static string ResolvedEnumName(BidirectionalDictionary<string, string> map, string enumText) { string resolvedEnumName; map.TryGetBySecond(enumText, out resolvedEnumName); resolvedEnumName = resolvedEnumName ?? enumText; return resolvedEnumName; }
private BidirectionalDictionary<string, string> GetEnumNameMap(Type t) { BidirectionalDictionary<string, string> bidirectionalDictionary; if (!this._enumMemberNamesPerType.TryGetValue(t, out bidirectionalDictionary)) { lock (this._enumMemberNamesPerType) { if (this._enumMemberNamesPerType.TryGetValue(t, out bidirectionalDictionary)) return bidirectionalDictionary; bidirectionalDictionary = new BidirectionalDictionary<string, string>((IEqualityComparer<string>) StringComparer.OrdinalIgnoreCase, (IEqualityComparer<string>) StringComparer.OrdinalIgnoreCase); foreach (FieldInfo item_0 in t.GetFields()) { string local_2 = item_0.Name; string local_3 = item_0.Name; string local_4; if (bidirectionalDictionary.TryGetBySecond(local_3, out local_4)) throw new InvalidOperationException(StringUtils.FormatWith("Enum name '{0}' already exists on enum '{1}'.", (IFormatProvider) CultureInfo.InvariantCulture, (object) local_3, (object) t.Name)); bidirectionalDictionary.Set(local_2, local_3); } this._enumMemberNamesPerType[t] = bidirectionalDictionary; } } return bidirectionalDictionary; }
private static BidirectionalDictionary<string, string> InitializeEnumType(Type type) { BidirectionalDictionary<string, string> map = new BidirectionalDictionary<string, string>( StringComparer.OrdinalIgnoreCase, StringComparer.OrdinalIgnoreCase); foreach (FieldInfo f in type.GetFields()) { string n1 = f.Name; string n2; #if !NET20 n2 = f.GetCustomAttributes(typeof(EnumMemberAttribute), true) .Cast<EnumMemberAttribute>() .Select(a => a.Value) .SingleOrDefault() ?? f.Name; #else n2 = f.Name; #endif string s; if (map.TryGetBySecond(n2, out s)) throw new InvalidOperationException("Enum name '{0}' already exists on enum '{1}'.".FormatWith(CultureInfo.InvariantCulture, n2, type.Name)); map.Set(n1, n2); } return map; }