Browse Source

集合为null时序列化成空集合

懒得勤快 1 year ago
parent
commit
62ed50dd84

+ 31 - 0
Masuit.Tools.Abstractions/Systems/CompositeContractResolver.cs

@@ -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;
+    }
+}

+ 1 - 1
Masuit.Tools.Excel/Masuit.Tools.Excel.csproj

@@ -37,7 +37,7 @@
       </None>
     </ItemGroup>
     <ItemGroup>
-        <PackageReference Include="EPPlus" Version="7.3.1" />
+        <PackageReference Include="EPPlus" Version="7.3.2" />
         <PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
     </ItemGroup>
     <ItemGroup>

+ 1 - 1
Masuit.Tools.NoSQL.MongoDBClient/Masuit.Tools.NoSQL.MongoDBClient.csproj

@@ -38,7 +38,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="MongoDB.Driver" Version="2.28.0" />
+    <PackageReference Include="MongoDB.Driver" Version="2.29.0" />
   </ItemGroup>
 
 </Project>

+ 1 - 1
Masuit.Tools/Masuit.Tools.Net.csproj

@@ -35,7 +35,7 @@
 
     <ItemGroup>
         <PackageReference Include="Microsoft.AspNet.Mvc" Version="5.3.0" />
-        <PackageReference Include="StackExchange.Redis" Version="2.8.12" />
+        <PackageReference Include="StackExchange.Redis" Version="2.8.16" />
         <ProjectReference Include="..\Masuit.Tools.Abstractions\Masuit.Tools.Abstractions.csproj" />
         <Reference Include="System.Web" />
     </ItemGroup>

+ 1 - 1
Test/Masuit.Tools.Test/Masuit.Tools.Test.csproj

@@ -91,7 +91,7 @@
       <Version>2.0.0</Version>
     </PackageReference>
     <PackageReference Include="Moq">
-      <Version>4.20.71</Version>
+      <Version>4.20.72</Version>
     </PackageReference>
     <PackageReference Include="System.Runtime.CompilerServices.Unsafe">
       <Version>6.0.0</Version>