|
|
@@ -10,6 +10,22 @@ namespace Masuit.Tools.Systems;
|
|
|
/// </summary>
|
|
|
public class CompositeContractResolver : FallbackJsonPropertyResolver
|
|
|
{
|
|
|
+ protected override IValueProvider CreateMemberValueProvider(MemberInfo member)
|
|
|
+ {
|
|
|
+ IValueProvider provider = base.CreateMemberValueProvider(member);
|
|
|
+ if (member.MemberType == MemberTypes.Property)
|
|
|
+ {
|
|
|
+ Type propType = ((PropertyInfo)member).PropertyType;
|
|
|
+ if (propType.IsGenericType &&
|
|
|
+ propType.GetGenericTypeDefinition() == typeof(List<>))
|
|
|
+ {
|
|
|
+ return new EmptyListValueProvider(provider, propType);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return provider;
|
|
|
+ }
|
|
|
+
|
|
|
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
|
|
|
{
|
|
|
var property = base.CreateProperty(member, memberSerialization);
|
|
|
@@ -26,3 +42,18 @@ public class CompositeContractResolver : FallbackJsonPropertyResolver
|
|
|
return property;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+internal class EmptyListValueProvider(IValueProvider innerProvider, Type listType) : IValueProvider
|
|
|
+{
|
|
|
+ private readonly object _defaultValue = Activator.CreateInstance(listType);
|
|
|
+
|
|
|
+ public void SetValue(object target, object value)
|
|
|
+ {
|
|
|
+ innerProvider.SetValue(target, value ?? _defaultValue);
|
|
|
+ }
|
|
|
+
|
|
|
+ public object GetValue(object target)
|
|
|
+ {
|
|
|
+ return innerProvider.GetValue(target) ?? _defaultValue;
|
|
|
+ }
|
|
|
+}
|