Browse Source

Optimize ObjectToInferredTypesConverter and add tests

https://github.com/abpframework/abp/discussions/23692
pull/23693/head
maliming 11 months ago
parent
commit
a0260ffbb8
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 11
      framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/ObjectToInferredTypesConverter.cs
  2. 54
      framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/ObjectToInferredTypesConverter_Tests.cs

11
framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/ObjectToInferredTypesConverter.cs

@ -9,6 +9,8 @@ namespace Volo.Abp.Json.SystemTextJson.JsonConverters;
/// </summary>
public class ObjectToInferredTypesConverter : JsonConverter<object>
{
private JsonSerializerOptions? _writeJsonSerializerOptions;
public override object Read(
ref Utf8JsonReader reader,
Type typeToConvert,
@ -26,6 +28,11 @@ public class ObjectToInferredTypesConverter : JsonConverter<object>
public override void Write(
Utf8JsonWriter writer,
object objectToWrite,
JsonSerializerOptions options) =>
JsonSerializer.Serialize(writer, objectToWrite, objectToWrite.GetType(), options);
JsonSerializerOptions options)
{
_writeJsonSerializerOptions ??= JsonSerializerOptionsHelper.Create(options, x =>
x == this ||
x.GetType() == typeof(ObjectToInferredTypesConverter));
JsonSerializer.Serialize(writer, objectToWrite, objectToWrite.GetType(), _writeJsonSerializerOptions);
}
}

54
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<IJsonSerializer>();
}
[Fact]
public void Test()
{
var objString = _jsonSerializer.Serialize(new object());
objString.ShouldBe("{}");
var obj = _jsonSerializer.Deserialize<object>(objString);
obj.ShouldBeOfType<JsonElement>();
var booleanString = _jsonSerializer.Serialize(true);
booleanString.ShouldBe("true");
var boolean = _jsonSerializer.Deserialize<bool>(booleanString);
boolean.ShouldBe(true);
var booleanString2 = _jsonSerializer.Serialize(false);
booleanString2.ShouldBe("false");
var boolean2 = _jsonSerializer.Deserialize<bool>(booleanString2);
boolean2.ShouldBe(false);
var numberString = _jsonSerializer.Serialize(1);
numberString.ShouldBe("1");
var number = _jsonSerializer.Deserialize<long>(numberString);
number.ShouldBe(1);
var numberString2 = _jsonSerializer.Serialize(1.1);
numberString2.ShouldBe("1.1");
var number2 = _jsonSerializer.Deserialize<double>(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<System.DateTime>(dateString);
date.ShouldBe(System.DateTime.Parse("2024-01-01"));
var textString = _jsonSerializer.Serialize("text");
textString.ShouldBe("\"text\"");
var text = _jsonSerializer.Deserialize<string>(textString);
text.ShouldBe("text");
}
}
Loading…
Cancel
Save