diff --git a/json-csharp/CustomJsonConverter/CustomJsonConverter.Tests/ConverterRegistrationUnitTest.cs b/json-csharp/CustomJsonConverter/CustomJsonConverter.Tests/ConverterRegistrationUnitTest.cs new file mode 100644 index 0000000000..765d64e140 --- /dev/null +++ b/json-csharp/CustomJsonConverter/CustomJsonConverter.Tests/ConverterRegistrationUnitTest.cs @@ -0,0 +1,42 @@ +using CustomJsonConverter.Converters; +using Newtonsoft.Json; +using Xunit; + +namespace CustomJsonConverter.Tests; + +[JsonConverter(typeof(ImprovedContactConverter))] +public record class TaggedContact(string Name, Department Department, string Phone, Address Address) + : Contact(Name, Department, Phone, Address); + +public class ConverterRegistrationUnitTest +{ + [Fact] + public void GivenListOfContacts_WhenConverterIsRegisteredInSettings_ThenWritesCustomizedOutput() + { + var contacts = DataSource.GetContacts(); + var settings = new JsonSerializerSettings + { + Converters = { new SmartContactConverter() } + }; + + var json = JsonConvert.SerializeObject(contacts, settings); + + Assert.Equal(@"[{""Name"":""John"",""Department"":""Admin"",""Address"":{""Street"":""Street 1"",""City"":""City 1""}},{""Name"":""Jane"",""Department"":""CustomerCare"",""Phone"":""+2341"",""Address"":{""Street"":""Street 2"",""City"":""City 2""}},{""Name"":""Mike"",""Department"":""Operations"",""Address"":{""Street"":""Street 3"",""City"":""City 3""}}]", json); + } + + [Fact] + public void GivenTypeWithConverterAttribute_WhenRoundTripped_ThenConverterWritesAndDefaultContractReads() + { + var contact = new TaggedContact("John", Department.Admin, "+1234", new("Street 1", "City 1")); + + var json = JsonConvert.SerializeObject(contact); + + Assert.Equal(@"{""Name"":""John"",""Department"":1}", json); + + var restored = JsonConvert.DeserializeObject(json)!; + + Assert.Equal("John", restored.Name); + Assert.Equal(Department.Admin, restored.Department); + Assert.Null(restored.Phone); + } +} diff --git a/json-csharp/CustomJsonConverter/CustomJsonConverter.Tests/CustomJsonConverter.Tests.csproj b/json-csharp/CustomJsonConverter/CustomJsonConverter.Tests/CustomJsonConverter.Tests.csproj index ed22e9cd8c..7d92581b96 100644 --- a/json-csharp/CustomJsonConverter/CustomJsonConverter.Tests/CustomJsonConverter.Tests.csproj +++ b/json-csharp/CustomJsonConverter/CustomJsonConverter.Tests/CustomJsonConverter.Tests.csproj @@ -1,21 +1,20 @@  - net7.0 + net10.0 enable false - - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/json-csharp/CustomJsonConverter/CustomJsonConverter/Converters/SmartContactConverter.cs b/json-csharp/CustomJsonConverter/CustomJsonConverter/Converters/SmartContactConverter.cs index 8d2b9f1067..f38295fab5 100644 --- a/json-csharp/CustomJsonConverter/CustomJsonConverter/Converters/SmartContactConverter.cs +++ b/json-csharp/CustomJsonConverter/CustomJsonConverter/Converters/SmartContactConverter.cs @@ -41,8 +41,4 @@ public override void WriteJson(JsonWriter writer, Contact? contact, JsonSerializ return jo.ToObject(); } - - public override bool CanWrite => true; - - public override bool CanRead => true; } \ No newline at end of file diff --git a/json-csharp/CustomJsonConverter/CustomJsonConverter/CustomJsonConverter.csproj b/json-csharp/CustomJsonConverter/CustomJsonConverter/CustomJsonConverter.csproj index 51eb283c58..ab6ddb3aff 100644 --- a/json-csharp/CustomJsonConverter/CustomJsonConverter/CustomJsonConverter.csproj +++ b/json-csharp/CustomJsonConverter/CustomJsonConverter/CustomJsonConverter.csproj @@ -1,13 +1,13 @@ - net7.0 + net10.0 enable enable - +