internal static JsonDiscriminatorSettings Map(JsonDiscriminatorAttribute entity) { var settings = new JsonDiscriminatorSettings(); settings.DiscriminatorFieldName = entity.Name ?? settings.DiscriminatorFieldName; settings.UseClassNameAsDiscriminator = entity.AutoJson ?? settings.UseClassNameAsDiscriminator; return(settings); }
public static JsonDiscriminatorSettings Map(JsonDiscriminatorAttribute entity) { var settings = new JsonDiscriminatorSettings(); settings.Name = entity.Name ?? settings.Name; settings.AutoJsonKnown = entity._autoJson ?? settings.AutoJsonKnown; return(settings); }
internal static JsonDiscriminatorSettings Map(JsonDiscriminatorAttribute entity) { var settings = new JsonDiscriminatorSettings(); settings.DiscriminatorFieldName = entity.Name ?? settings.DiscriminatorFieldName; settings.AddAutoDiscriminators = entity.AutoJson ?? settings.AddAutoDiscriminators; settings.UseBaseTypeDescriminators = entity.UseBaseTypeDescriminatorsValue ?? settings.UseBaseTypeDescriminators; return(settings); }
public void Apply <T>(JsonSerializerOptions options, ObjectMapping <T> objectMapping) { Type type = objectMapping.ObjectType; List <MemberMapping <T> > memberMappings = new List <MemberMapping <T> >(); JsonDiscriminatorAttribute discriminatorAttribute = type.GetCustomAttribute <JsonDiscriminatorAttribute>(); if (discriminatorAttribute != null) { objectMapping.SetDiscriminator(discriminatorAttribute.Discriminator); objectMapping.SetDiscriminatorPolicy(discriminatorAttribute.Policy); } Type namingPolicyType = type.GetCustomAttribute <JsonNamingPolicyAttribute>()?.NamingPolicyType; if (namingPolicyType != null) { objectMapping.SetPropertyNamingPolicy((JsonNamingPolicy)Activator.CreateInstance(namingPolicyType)); } PropertyInfo[] properties = type.GetProperties(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); FieldInfo[] fields = type.GetFields(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); foreach (PropertyInfo propertyInfo in properties) { if (propertyInfo.IsDefined(typeof(JsonIgnoreAttribute))) { continue; } if (propertyInfo.IsDefined(typeof(JsonExtensionDataAttribute))) { objectMapping.MapExtensionData(propertyInfo); continue; } if ((propertyInfo.GetMethod.IsPrivate || propertyInfo.GetMethod.IsStatic) && !propertyInfo.IsDefined(typeof(JsonPropertyNameAttribute)) && !propertyInfo.IsDefined(typeof(JsonPropertyAttribute))) { continue; } MemberMapping <T> memberMapping = new MemberMapping <T>(options, objectMapping, propertyInfo, propertyInfo.PropertyType); ProcessDefaultValue(propertyInfo, memberMapping); ProcessShouldSerializeMethod(memberMapping); ProcessRequired(propertyInfo, memberMapping); ProcessMemberName(propertyInfo, memberMapping); ProcessConverter(propertyInfo, memberMapping); ProcessDeserialize(propertyInfo, memberMapping); memberMappings.Add(memberMapping); } foreach (FieldInfo fieldInfo in fields) { if (fieldInfo.IsDefined(typeof(JsonIgnoreAttribute))) { continue; } if ((fieldInfo.IsPrivate || fieldInfo.IsStatic) && !fieldInfo.IsDefined(typeof(JsonPropertyNameAttribute)) && !fieldInfo.IsDefined(typeof(JsonPropertyAttribute))) { continue; } Type fieldType = fieldInfo.FieldType; MemberMapping <T> memberMapping = new MemberMapping <T>(options, objectMapping, fieldInfo, fieldInfo.FieldType); ProcessDefaultValue(fieldInfo, memberMapping); ProcessShouldSerializeMethod(memberMapping); ProcessRequired(fieldInfo, memberMapping); ProcessMemberName(fieldInfo, memberMapping); ProcessConverter(fieldInfo, memberMapping); memberMappings.Add(memberMapping); } objectMapping.AddMemberMappings(memberMappings); ConstructorInfo[] constructorInfos = type.GetConstructors(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); ConstructorInfo constructorInfo = constructorInfos .FirstOrDefault(c => c.IsDefined(typeof(JsonConstructorAttribute))); if (constructorInfo != null) { JsonConstructorAttribute constructorAttribute = constructorInfo.GetCustomAttribute <JsonConstructorAttribute>(); CreatorMapping creatorMapping = objectMapping.MapCreator(constructorInfo); if (constructorAttribute.MemberNames != null) { creatorMapping.SetMemberNames(constructorAttribute.MemberNames); } } // if no default constructor, pick up first one else if (constructorInfos.Length > 0 && !constructorInfos.Any(c => c.GetParameters().Length == 0)) { constructorInfo = constructorInfos[0]; objectMapping.MapCreator(constructorInfo); } MethodInfo methodInfo = type.GetMethods() .FirstOrDefault(m => m.IsDefined(typeof(OnDeserializingAttribute))); if (methodInfo != null) { objectMapping.SetOnDeserializingMethod(GenerateCallbackDelegate <T>(methodInfo)); } else if (type.GetInterfaces().Any(i => i == typeof(ISupportInitialize))) { objectMapping.SetOnDeserializingMethod(t => ((ISupportInitialize)t).BeginInit()); } methodInfo = type.GetMethods() .FirstOrDefault(m => m.IsDefined(typeof(OnDeserializedAttribute))); if (methodInfo != null) { objectMapping.SetOnDeserializedMethod(GenerateCallbackDelegate <T>(methodInfo)); } else if (type.GetInterfaces().Any(i => i == typeof(ISupportInitialize))) { objectMapping.SetOnDeserializedMethod(t => ((ISupportInitialize)t).EndInit()); } methodInfo = type.GetMethods() .FirstOrDefault(m => m.IsDefined(typeof(OnSerializingAttribute))); if (methodInfo != null) { objectMapping.SetOnSerializingMethod(GenerateCallbackDelegate <T>(methodInfo)); } methodInfo = type.GetMethods() .FirstOrDefault(m => m.IsDefined(typeof(OnSerializedAttribute))); if (methodInfo != null) { objectMapping.SetOnSerializedMethod(GenerateCallbackDelegate <T>(methodInfo)); } }