diff --git a/src/Flurl.Http.Newtonsoft/ExtensionMethods.cs b/src/Flurl.Http.Newtonsoft/ExtensionMethods.cs index 4e184ebd..c43618d5 100644 --- a/src/Flurl.Http.Newtonsoft/ExtensionMethods.cs +++ b/src/Flurl.Http.Newtonsoft/ExtensionMethods.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Dynamic; using System.Threading.Tasks; +using Flurl.Http.Configuration; +using Newtonsoft.Json; namespace Flurl.Http.Newtonsoft { @@ -47,5 +49,23 @@ public static async Task> ReceiveJsonList(this Task + /// Shortcut to use NewtonsoftJsonSerializer with this IFlurlClientBuilder. + /// + /// This IFlurlClientBuilder. + /// Optional custom JsonSerializerSettings. + /// + public static IFlurlClientBuilder UseNewtonsoft(this IFlurlClientBuilder builder, JsonSerializerSettings settings = null) => + builder.WithSettings(fs => fs.JsonSerializer = new NewtonsoftJsonSerializer(settings)); + + /// + /// Shortcut to use NewtonsoftJsonSerializer with all FlurlClients registered in this cache. + /// + /// This IFlurlClientCache. + /// Optional custom JsonSerializerSettings. + /// + public static IFlurlClientCache UseNewtonsoft(this IFlurlClientCache cache, JsonSerializerSettings settings = null) => + cache.WithDefaults(builder => builder.UseNewtonsoft(settings)); } } diff --git a/test/Flurl.Test/Http/NewtonsoftTests.cs b/test/Flurl.Test/Http/NewtonsoftTests.cs index 6f01fa3f..557273ad 100644 --- a/test/Flurl.Test/Http/NewtonsoftTests.cs +++ b/test/Flurl.Test/Http/NewtonsoftTests.cs @@ -1,8 +1,11 @@ -using NUnit.Framework; +using System; +using NUnit.Framework; using Flurl.Http; using Flurl.Http.Newtonsoft; using Flurl.Http.Testing; using System.Threading.Tasks; +using Flurl.Http.Configuration; +using Newtonsoft.Json; namespace Flurl.Test.Http { @@ -43,7 +46,7 @@ public async Task can_get_dynamic_list() { } [TestFixture, Parallelizable] - public class NewtonsofPostTests : PostTests + public class NewtonsoftPostTests : PostTests { protected override HttpTest CreateHttpTest() => base.CreateHttpTest() .WithSettings(settings => settings.JsonSerializer = new NewtonsoftJsonSerializer()); @@ -73,4 +76,33 @@ public async Task can_receive_json_dynamic_list() { Assert.AreEqual("Claire", data[1].name); } } + + [TestFixture, Parallelizable] + public class NewtonsoftConfigTests + { + [Test] + public void can_register_with_builder() { + var cache = new FlurlClientCache(); + var cli = cache.GetOrAdd("foo", null, builder => builder.UseNewtonsoft(new JsonSerializerSettings { DateFormatString = "1234" })); + + Assert.IsInstanceOf(cli.Settings.JsonSerializer); + + var obj = new { Date = DateTime.Now }; + var json = cli.Settings.JsonSerializer.Serialize(obj); + Assert.AreEqual("{\"Date\":\"1234\"}", json); + } + + [Test] + public void can_register_with_cache() { + var cache = new FlurlClientCache().UseNewtonsoft(new JsonSerializerSettings { DateFormatString = "1234" }); + var cli = cache.GetOrAdd("foo"); + + Assert.IsInstanceOf(cli.Settings.JsonSerializer); + + var obj = new { Date = DateTime.Now }; + var json = cli.Settings.JsonSerializer.Serialize(obj); + Assert.AreEqual("{\"Date\":\"1234\"}", json); + } + + } }