diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs index 560d6baa36..923123b107 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using JetBrains.Annotations; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; @@ -18,17 +19,19 @@ namespace Volo.Abp.Json ServiceScopeFactory = serviceScopeFactory; } - public string Serialize(object obj, bool camelCase = true, bool indented = false) + public string Serialize([CanBeNull]object obj, bool camelCase = true, bool indented = false) { using (var scope = ServiceScopeFactory.CreateScope()) { - var serializerProvider = GetSerializerProvider(scope.ServiceProvider, obj.GetType()); + var serializerProvider = GetSerializerProvider(scope.ServiceProvider, obj?.GetType()); return serializerProvider.Serialize(obj, camelCase, indented); } } - public T Deserialize(string jsonString, bool camelCase = true) + public T Deserialize([NotNull]string jsonString, bool camelCase = true) { + Check.NotNull(jsonString, nameof(jsonString)); + using (var scope = ServiceScopeFactory.CreateScope()) { var serializerProvider = GetSerializerProvider(scope.ServiceProvider, typeof(T)); @@ -36,8 +39,10 @@ namespace Volo.Abp.Json } } - public object Deserialize(Type type, string jsonString, bool camelCase = true) + public object Deserialize(Type type, [NotNull]string jsonString, bool camelCase = true) { + Check.NotNull(jsonString, nameof(jsonString)); + using (var scope = ServiceScopeFactory.CreateScope()) { var serializerProvider = GetSerializerProvider(scope.ServiceProvider, type); @@ -45,7 +50,7 @@ namespace Volo.Abp.Json } } - protected virtual IJsonSerializerProvider GetSerializerProvider(IServiceProvider serviceProvider, Type type) + protected virtual IJsonSerializerProvider GetSerializerProvider(IServiceProvider serviceProvider, [CanBeNull]Type type) { foreach (var providerType in Options.Providers.Reverse()) { diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/IJsonSerializerProvider.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/IJsonSerializerProvider.cs index f844dc5fd0..fa974b5aeb 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/IJsonSerializerProvider.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/IJsonSerializerProvider.cs @@ -1,10 +1,11 @@ using System; +using JetBrains.Annotations; namespace Volo.Abp.Json { public interface IJsonSerializerProvider { - bool CanHandle(Type type); + bool CanHandle([CanBeNull]Type type); string Serialize(object obj, bool camelCase = true, bool indented = false); diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonUnsupportedTypeMatcher.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonUnsupportedTypeMatcher.cs index 2beea42c68..9004a0c404 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonUnsupportedTypeMatcher.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonUnsupportedTypeMatcher.cs @@ -1,4 +1,5 @@ using System; +using JetBrains.Annotations; using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; @@ -13,7 +14,7 @@ namespace Volo.Abp.Json.SystemTextJson Options = options.Value; } - public virtual bool Match(Type type) + public virtual bool Match([CanBeNull]Type type) { return Options.UnsupportedTypes.Contains(type); }