internal EFieldSelectorOption GetSelectorOption(Type type) { EFieldSelectorOption selectorOption = fieldSelectorOption; if (explicitTypes != null && explicitTypes.Contains(type)) { selectorOption = EFieldSelectorOption.Explicit; } else if (implicitTypes != null && implicitTypes.Contains(type)) { selectorOption = EFieldSelectorOption.Implicit; } return(selectorOption); }
public static IEnumerable <ConfigTypeInfo> GatherTypeInfo(Type configType, ConfigOptions options) { FieldInfo[] fieldInfos = configType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public); IEnumerable <ConfigTypeInfo> result = fieldInfos .SelectMany(field => field.GetCustomAttributes <SerializationAttribute>() .Select(attribute => new ConfigTypeInfo(field, attribute)) ).OrderBy(info => info.fieldSerializer.GetOrder()); EFieldSelectorOption selectorOption = options.GetSelectorOption(configType); if (selectorOption == EFieldSelectorOption.Implicit) { result = result.Concat( fieldInfos.Where(field => !Attribute.IsDefined(field, typeof(SerializationAttribute))) .Select(field => new ConfigTypeInfo(field, ImplicitFieldSerializer.Instance())) ); } return(result); }