Created
August 31, 2017 19:22
-
-
Save stevenguh/7c10bbb16ed9d31897dc1b43c768005a to your computer and use it in GitHub Desktop.
NodaContractResolverBenchmarks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using BenchmarkDotNet.Attributes; | |
using Newtonsoft.Json; | |
using NodaTime.Serialization.JsonNet; | |
namespace NodaTime.Serialization.Benchmarks.JsonNet | |
{ | |
[MemoryDiagnoser] | |
public class NodaContractResolverBenchmarks | |
{ | |
static readonly Instant _instant = Instant.FromUtc(2017, 6, 7, 0, 0); | |
static readonly DateTime _dateTime = new DateTime(2017, 6, 7); | |
static readonly JsonSerializerSettings _settings = new JsonSerializerSettings(); | |
static NodaContractResolverBenchmarks() | |
{ | |
_settings.ContractResolver = new NodaJsonContractResolver(DateTimeZoneProviders.Tzdb); | |
_settings.DateParseHandling = DateParseHandling.None; | |
} | |
[Benchmark(Baseline = true)] | |
public void SerializeDateTimeWithoutSettings() | |
{ | |
JsonConvert.SerializeObject(new { tm = _dateTime }); | |
} | |
[Benchmark] | |
public void SerializeInstantWithoutSettings() | |
{ | |
JsonConvert.SerializeObject(new { tm = _instant }); | |
} | |
[Benchmark] | |
public void SerializeDateTimeWithSettings() | |
{ | |
JsonConvert.SerializeObject(new { tm = _dateTime }, _settings); | |
} | |
[Benchmark] | |
public void SerializeInstantWithSettings() | |
{ | |
JsonConvert.SerializeObject(new { tm = _instant }, _settings); | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using Newtonsoft.Json; | |
using Newtonsoft.Json.Serialization; | |
namespace NodaTime.Serialization.JsonNet | |
{ | |
public class NodaJsonContractResolver : DefaultContractResolver | |
{ | |
JsonConverter _dateTimeZoneConverter; | |
JsonConverter _zonedDateTimeConverter; | |
public NodaJsonContractResolver(IDateTimeZoneProvider provider) | |
{ | |
_dateTimeZoneConverter = NodaConverters.CreateDateTimeZoneConverter(provider); | |
_zonedDateTimeConverter = NodaConverters.CreateZonedDateTimeConverter(provider); | |
} | |
protected override JsonContract CreateContract(Type objectType) | |
{ | |
JsonContract contract = base.CreateContract(objectType); | |
if (NodaConverters.InstantConverter.CanConvert(objectType)) | |
{ | |
contract.Converter = NodaConverters.InstantConverter; | |
} | |
else if (NodaConverters.IntervalConverter.CanConvert(objectType)) | |
{ | |
contract.Converter = NodaConverters.IntervalConverter; | |
} | |
else if (NodaConverters.LocalDateConverter.CanConvert(objectType)) | |
{ | |
contract.Converter = NodaConverters.LocalDateConverter; | |
} | |
else if (NodaConverters.LocalDateTimeConverter.CanConvert(objectType)) | |
{ | |
contract.Converter = NodaConverters.LocalDateTimeConverter; | |
} | |
else if (NodaConverters.LocalTimeConverter.CanConvert(objectType)) | |
{ | |
contract.Converter = NodaConverters.LocalTimeConverter; | |
} | |
else if (NodaConverters.OffsetConverter.CanConvert(objectType)) | |
{ | |
contract.Converter = NodaConverters.OffsetConverter; | |
} | |
else if (_dateTimeZoneConverter.CanConvert(objectType)) | |
{ | |
contract.Converter = _dateTimeZoneConverter; | |
} | |
else if (NodaConverters.DurationConverter.CanConvert(objectType)) | |
{ | |
contract.Converter = NodaConverters.DurationConverter; | |
} | |
else if (NodaConverters.RoundtripPeriodConverter.CanConvert(objectType)) | |
{ | |
contract.Converter = NodaConverters.RoundtripPeriodConverter; | |
} | |
else if (NodaConverters.OffsetDateTimeConverter.CanConvert(objectType)) | |
{ | |
contract.Converter = NodaConverters.OffsetDateTimeConverter; | |
} | |
else if (_zonedDateTimeConverter.CanConvert(objectType)) | |
{ | |
contract.Converter = _zonedDateTimeConverter; | |
} | |
return contract; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment