using Xunit; namespace SKIT.FlurlHttpClient.Wechat.TenpayV2.UnitTests { public class TestCase_JsonConverterOfYesOrNoBooleanBooleanTest { private sealed class MockObject { [Newtonsoft.Json.JsonProperty(Order = 1)] [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))] [System.Text.Json.Serialization.JsonPropertyOrder(1)] [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))] public bool Property { get; set; } [Newtonsoft.Json.JsonProperty(Order = 2)] [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))] [System.Text.Json.Serialization.JsonPropertyOrder(2)] [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))] public bool? NullableProperty { get; set; } } private static void TestCustomJsonConverter(IJsonSerializer jsonSerializer) { Assert.Multiple(() => { var expectObj = new MockObject() { NullableProperty = null }; var actualJson = jsonSerializer.Serialize(expectObj); var actualObj = jsonSerializer.Deserialize(actualJson); Assert.Equal("{\"Property\":\"N\"}", actualJson); Assert.Equal(expectObj.Property, actualObj.Property); Assert.Equal(expectObj.Property, jsonSerializer.Deserialize("{\"Property\":\"N\"}").Property); Assert.Equal(expectObj.Property, jsonSerializer.Deserialize("{}").Property); Assert.Equal(expectObj.NullableProperty, actualObj.NullableProperty); Assert.Equal(expectObj.NullableProperty, jsonSerializer.Deserialize("{\"NullableProperty\":null}").NullableProperty); Assert.Equal(expectObj.NullableProperty, jsonSerializer.Deserialize("{}").NullableProperty); }); Assert.Multiple(() => { var expectObj = new MockObject() { Property = false, NullableProperty = false }; var actualJson = jsonSerializer.Serialize(expectObj); var actualObj = jsonSerializer.Deserialize(actualJson); Assert.Equal("{\"Property\":\"N\",\"NullableProperty\":\"N\"}", actualJson); Assert.Equal(expectObj.Property, actualObj.Property); Assert.Equal(expectObj.Property, jsonSerializer.Deserialize("{\"Property\":false}").Property); Assert.Equal(expectObj.NullableProperty, actualObj.NullableProperty); Assert.Equal(expectObj.NullableProperty, jsonSerializer.Deserialize("{\"NullableProperty\":false}").NullableProperty); }); Assert.Multiple(() => { var expectObj = new MockObject() { Property = true, NullableProperty = true }; var actualJson = jsonSerializer.Serialize(expectObj); var actualObj = jsonSerializer.Deserialize(actualJson); Assert.Equal("{\"Property\":\"Y\",\"NullableProperty\":\"Y\"}", actualJson); Assert.Equal(expectObj.Property, actualObj.Property); Assert.Equal(expectObj.Property, jsonSerializer.Deserialize("{\"Property\":true}").Property); Assert.Equal(expectObj.NullableProperty, actualObj.NullableProperty); Assert.Equal(expectObj.NullableProperty, jsonSerializer.Deserialize("{\"NullableProperty\":true}").NullableProperty); }); } [Fact(DisplayName = "测试用例:自定义 Newtosoft.Json.JsonConverter 之 YesOrNoBooleanConverter")] public void TestNewtosoftJsonConverter() { var jsonSettings = NewtonsoftJsonSerializer.GetDefaultSerializerSettings(); jsonSettings.Formatting = Newtonsoft.Json.Formatting.None; jsonSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore; TestCustomJsonConverter(new NewtonsoftJsonSerializer(jsonSettings)); } [Fact(DisplayName = "测试用例:自定义 System.Text.Json.Serialization.JsonConverter 之 YesOrNoBooleanConverter")] public void TestSystemTextJsonConverter() { var jsonOptions = SystemTextJsonSerializer.GetDefaultSerializerOptions(); jsonOptions.WriteIndented = false; jsonOptions.DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull; TestCustomJsonConverter(new SystemTextJsonSerializer(jsonOptions)); } } }