diff --git a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/ObjectToInferredTypesConverter.cs b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/ObjectToInferredTypesConverter.cs index bf017d041e..85c47c738d 100644 --- a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/ObjectToInferredTypesConverter.cs +++ b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/ObjectToInferredTypesConverter.cs @@ -26,6 +26,16 @@ public class ObjectToInferredTypesConverter : JsonConverter public override void Write( Utf8JsonWriter writer, object objectToWrite, - JsonSerializerOptions options) => - JsonSerializer.Serialize(writer, objectToWrite, objectToWrite.GetType(), options); + JsonSerializerOptions options) + { + var runtimeType = objectToWrite.GetType(); + if (runtimeType == typeof(object)) + { + writer.WriteStartObject(); + writer.WriteEndObject(); + return; + } + + JsonSerializer.Serialize(writer, objectToWrite, runtimeType, options); + } } diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/ObjectToInferredTypesConverter_Tests.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/ObjectToInferredTypesConverter_Tests.cs new file mode 100644 index 0000000000..b5d5c3b394 --- /dev/null +++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/ObjectToInferredTypesConverter_Tests.cs @@ -0,0 +1,54 @@ +using System.Text.Json; +using Shouldly; +using Xunit; + +namespace Volo.Abp.Json; + +public class ObjectToInferredTypesConverter_Tests : AbpJsonSystemTextJsonTestBase +{ + private readonly IJsonSerializer _jsonSerializer; + + public ObjectToInferredTypesConverter_Tests() + { + _jsonSerializer = GetRequiredService(); + } + + [Fact] + public void Test() + { + var objString = _jsonSerializer.Serialize(new object()); + objString.ShouldBe("{}"); + var obj = _jsonSerializer.Deserialize(objString); + obj.ShouldBeOfType(); + + var booleanString = _jsonSerializer.Serialize(true); + booleanString.ShouldBe("true"); + var boolean = _jsonSerializer.Deserialize(booleanString); + boolean.ShouldBe(true); + + var booleanString2 = _jsonSerializer.Serialize(false); + booleanString2.ShouldBe("false"); + var boolean2 = _jsonSerializer.Deserialize(booleanString2); + boolean2.ShouldBe(false); + + var numberString = _jsonSerializer.Serialize(1); + numberString.ShouldBe("1"); + var number = _jsonSerializer.Deserialize(numberString); + number.ShouldBe(1); + + var numberString2 = _jsonSerializer.Serialize(1.1); + numberString2.ShouldBe("1.1"); + var number2 = _jsonSerializer.Deserialize(numberString2); + number2.ShouldBe(1.1); + + var dateString = _jsonSerializer.Serialize(System.DateTime.Parse("2024-01-01")); + dateString.ShouldBe("\"2024-01-01T00:00:00\""); + var date = _jsonSerializer.Deserialize(dateString); + date.ShouldBe(System.DateTime.Parse("2024-01-01")); + + var textString = _jsonSerializer.Serialize("text"); + textString.ShouldBe("\"text\""); + var text = _jsonSerializer.Deserialize(textString); + text.ShouldBe("text"); + } +}