From 3be5b3c3af64e6b569334dde55ebaf93169a93d1 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 27 Oct 2022 21:55:23 +0800 Subject: [PATCH] Update `AbpIncludeExtraPropertiesModifiers`. --- .../AbpIncludeExtraPropertiesModifiers.cs | 25 +++++++++++-------- .../Json/ExtensibleObjectModifiers_Tests.cs | 15 ++++++++++- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/Modifiers/AbpIncludeExtraPropertiesModifiers.cs b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/Modifiers/AbpIncludeExtraPropertiesModifiers.cs index d692c358eb..f4a97e0e9d 100644 --- a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/Modifiers/AbpIncludeExtraPropertiesModifiers.cs +++ b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/Modifiers/AbpIncludeExtraPropertiesModifiers.cs @@ -11,19 +11,22 @@ public static class AbpIncludeExtraPropertiesModifiers { public static void Modify(JsonTypeInfo jsonTypeInfo) { - var propertyJsonInfo = jsonTypeInfo.Properties - .Where(x => x.AttributeProvider is MemberInfo) - .FirstOrDefault(x => - x.PropertyType == typeof(ExtraPropertyDictionary) && - x.AttributeProvider.As().Name == nameof(ExtensibleObject.ExtraProperties) && - x.Set == null); - - if (propertyJsonInfo != null) + if (typeof(IHasExtraProperties).IsAssignableFrom(jsonTypeInfo.Type)) { - propertyJsonInfo.Set = (extraProperties, value) => + var propertyJsonInfo = jsonTypeInfo.Properties + .Where(x => x.AttributeProvider is MemberInfo) + .FirstOrDefault(x => + x.PropertyType == typeof(ExtraPropertyDictionary) && + x.AttributeProvider.As().Name == nameof(ExtensibleObject.ExtraProperties) && + x.Set == null); + + if (propertyJsonInfo != null) { - ObjectHelper.TrySetProperty(extraProperties.As(), x => x.ExtraProperties, () => (ExtraPropertyDictionary)value); - }; + propertyJsonInfo.Set = (obj, value) => + { + ObjectHelper.TrySetProperty(obj.As(), x => x.ExtraProperties, () => value); + }; + } } } } diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/ExtensibleObjectModifiers_Tests.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/ExtensibleObjectModifiers_Tests.cs index 820f18b1a2..0bb538f9d1 100644 --- a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/ExtensibleObjectModifiers_Tests.cs +++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/ExtensibleObjectModifiers_Tests.cs @@ -1,4 +1,5 @@ using Shouldly; +using Volo.Abp.Data; using Volo.Abp.Json.SystemTextJson; using Volo.Abp.ObjectExtending; using Xunit; @@ -13,7 +14,19 @@ public class ExtensibleObjectModifiers_Tests : AbpJsonTestBase var jsonSerializer = GetRequiredService(); var extensibleObject = jsonSerializer.Deserialize("{\"ExtraProperties\": {\"Test-Key\":\"Test-Value\"}}"); - extensibleObject.ExtraProperties.ShouldContainKeyAndValue("Test-Key", "Test-Value"); + + var bar = jsonSerializer.Deserialize("{\"ExtraProperties\": {\"Test-Key\":\"Test-Value\"}}"); + bar.ExtraProperties.ShouldContainKeyAndValue("Test-Key", "Test-Value"); } } + +public abstract class Foo : IHasExtraProperties +{ + public ExtraPropertyDictionary ExtraProperties { get; protected set; } +} + +public class Bar : Foo +{ + +}