SystemTextJsonReflectionService
                    public class SystemTextJsonReflectionService : ReflectionServiceBase<SystemTextJsonSchemaGeneratorSettings>
                
                using Namotion.Reflection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace NJsonSchema.Generation
{
    [System.Runtime.CompilerServices.NullableContext(1)]
    [System.Runtime.CompilerServices.Nullable(new byte[] {
        0,
        1
    })]
    public class SystemTextJsonReflectionService : ReflectionServiceBase<SystemTextJsonSchemaGeneratorSettings>
    {
        public override void GenerateProperties(JsonSchema schema, ContextualType contextualType, SystemTextJsonSchemaGeneratorSettings settings, JsonSchemaGenerator schemaGenerator, JsonSchemaResolver schemaResolver)
        {
            foreach (ContextualAccessorInfo item in contextualType.get_Properties().OfType<ContextualAccessorInfo>().Concat((IEnumerable<ContextualAccessorInfo>)contextualType.get_Fields())) {
                if (!(item.get_MemberInfo().DeclaringType != contextualType.get_Type())) {
                    FieldInfo fieldInfo = item.get_MemberInfo() as FieldInfo;
                    if ((object)fieldInfo == null || (!fieldInfo.IsPrivate && !fieldInfo.IsStatic && CustomAttributeExtensions.IsDefined(fieldInfo, typeof(DataMemberAttribute)))) {
                        PropertyInfo propertyInfo = item.get_MemberInfo() as PropertyInfo;
                        if (((object)propertyInfo == null || (!(propertyInfo.GetMethod == (MethodInfo)null) && !propertyInfo.GetMethod.IsPrivate && !propertyInfo.GetMethod.IsStatic) || (!(propertyInfo.SetMethod == (MethodInfo)null) && !propertyInfo.SetMethod.IsPrivate && !propertyInfo.SetMethod.IsStatic) || CustomAttributeExtensions.IsDefined(propertyInfo, typeof(DataMemberAttribute))) && (!(item.get_Name() == "EqualityContract") || !AttributeExtensions.IsAttributeDefined<CompilerGeneratedAttribute>(item, true))) {
                            PropertyInfo propertyInfo2 = item.get_MemberInfo() as PropertyInfo;
                            if ((object)propertyInfo2 == null || propertyInfo2.GetIndexParameters().Length == 0) {
                                bool flag = false;
                                Attribute attribute = EnumerableExtensions.FirstAssignableToTypeNameOrDefault<Attribute>(AttributeExtensions.GetAttributes(item, true), "System.Text.Json.Serialization.JsonIgnoreAttribute", 1);
                                if (attribute != null) {
                                    object obj = ObjectExtensions.TryGetPropertyValue<object>((object)attribute, "Condition", (object)null);
                                    if (obj == null || obj.ToString() == "Always")
                                        flag = true;
                                }
                                if (!flag && !schemaGenerator.IsPropertyIgnoredBySettings(item) && EnumerableExtensions.FirstAssignableToTypeNameOrDefault<Attribute>(AttributeExtensions.GetAttributes(item, true), "System.Text.Json.Serialization.JsonExtensionDataAttribute", 1) == null && !settings.ExcludedTypeNames.Contains(item.get_AccessorType().get_Type().FullName)) {
                                    JsonTypeDescription description = GetDescription(item.get_AccessorType(), settings.DefaultReferenceTypeNullHandling, settings);
                                    string propertyName = GetPropertyName(item, settings);
                                    if (schema.Properties.ContainsKey(propertyName)) {
                                        if (!settings.GetActualFlattenInheritanceHierarchy(contextualType.get_Type()))
                                            throw new InvalidOperationException("The JSON property '" + propertyName + "' is defined multiple times on type '" + contextualType.get_Type().FullName + "'.");
                                        schema.Properties.Remove(propertyName);
                                    }
                                    Attribute attribute2 = EnumerableExtensions.FirstAssignableToTypeNameOrDefault<Attribute>(AttributeExtensions.GetAttributes(item, true), "System.ComponentModel.DataAnnotations.RequiredAttribute", 1);
                                    dynamic val = schemaGenerator.GetDataMemberAttribute(item, contextualType.get_Type())?.IsRequired == true;
                                    bool flag2 = attribute2 != null;
                                    if (flag2 || ((flag2 | val) ? true : false))
                                        schema.RequiredProperties.Add(propertyName);
                                    bool isNullable = description.IsNullable && !flag2;
                                    schemaGenerator.AddProperty(schema, item, description, propertyName, attribute2, flag2, isNullable, null, schemaResolver);
                                }
                            }
                        }
                    }
                }
            }
        }
        public override bool IsStringEnum(ContextualType contextualType, SystemTextJsonSchemaGeneratorSettings settings)
        {
            if (!settings.SerializerOptions.Converters.OfType<JsonStringEnumConverter>().Any())
                return base.IsStringEnum(contextualType, settings);
            return true;
        }
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            1,
            2
        })]
        public override Func<object, string> GetEnumValueConverter(SystemTextJsonSchemaGeneratorSettings settings)
        {
            JsonSerializerOptions serializerOptions = new JsonSerializerOptions();
            foreach (JsonConverter converter in settings.SerializerOptions.Converters) {
                serializerOptions.Converters.Add(converter);
            }
            if (!serializerOptions.Converters.OfType<JsonStringEnumConverter>().Any())
                serializerOptions.Converters.Add(new JsonStringEnumConverter());
            return (object x) => JsonSerializer.Deserialize<string>(JsonSerializer.Serialize(x, x.GetType(), serializerOptions), (JsonSerializerOptions)null);
        }
        public override string GetPropertyName(ContextualAccessorInfo accessorInfo, JsonSchemaGeneratorSettings settings)
        {
            return GetPropertyName(accessorInfo, (SystemTextJsonSchemaGeneratorSettings)settings);
        }
        private static string GetPropertyName(ContextualAccessorInfo accessorInfo, SystemTextJsonSchemaGeneratorSettings settings)
        {
            dynamic val = EnumerableExtensions.FirstAssignableToTypeNameOrDefault<Attribute>(AttributeExtensions.GetAttributes(accessorInfo, true), "System.Text.Json.Serialization.JsonPropertyNameAttribute", 1);
            if ((!string.IsNullOrEmpty(val?.Name)))
                return (string)val.Name;
            if (settings.SerializerOptions.PropertyNamingPolicy != null)
                return settings.SerializerOptions.PropertyNamingPolicy.ConvertName(accessorInfo.get_Name());
            return accessorInfo.get_Name();
        }
    }
}