From fc9822cea91fc05c6d1707398c05213ea145d59a Mon Sep 17 00:00:00 2001
From: electricessence <5899455+electricessence@users.noreply.github.com>
Date: Fri, 20 May 2022 22:31:09 -0700
Subject: [PATCH] Phase 2 cleanup and update.
---
.../Open.Serialization.Json.Newtonsoft.csproj | 9 +-
.../SerializationExtensions.cs | 3 +
.../CamelCaseJson.cs | 15 +-
.../CaseSensitiveJson.cs | 15 +-
.../Converters/JsonDecimalConverter.cs | 11 +
.../JsonDecimalRoundingConverter.cs | 14 ++
.../Converters/JsonDoubleRoundingConverter.cs | 2 +
.../JsonNullableDecimalConverter.cs | 3 +
.../JsonNullableDecimalRoundingConverter.cs | 2 +
.../JsonNullableDoubleRoundingConverter.cs | 2 +
.../Converters/JsonValueConverterBase.cs | 3 +
.../Open.Serialization.Json.System.csproj | 6 +-
Open.Serialization.Json.System/RelaxedJson.cs | 3 +
.../SerializationsExtensions.cs | 81 ++++++-
.../Open.Serialization.Json.Utf8Json.csproj | 9 +-
.../Open.Serialization.Json.csproj | 7 +-
.../DefaultImplementationTests.cs | 62 +++---
.../Newtonsoft/JsonExtensionTests.cs | 197 +++++++++---------
.../Open.Serialization.Tests.csproj | 9 +-
Open.Serialization.Tests/ParityTests.cs | 99 +++++----
Open.Serialization.Tests/SampleModel.cs | 43 ++--
.../System/JsonExtensionTests.cs | 94 ++++-----
Open.Serialization/Open.Serialization.csproj | 8 +-
Open.Serialization/Open.Serialization.xml | 2 +-
24 files changed, 424 insertions(+), 275 deletions(-)
diff --git a/Open.Serialization.Json.Newtonsoft/Open.Serialization.Json.Newtonsoft.csproj b/Open.Serialization.Json.Newtonsoft/Open.Serialization.Json.Newtonsoft.csproj
index d704945..81e330f 100644
--- a/Open.Serialization.Json.Newtonsoft/Open.Serialization.Json.Newtonsoft.csproj
+++ b/Open.Serialization.Json.Newtonsoft/Open.Serialization.Json.Newtonsoft.csproj
@@ -25,10 +25,11 @@
true
snupkg
logo.png
+ README.md
-
+
@@ -36,10 +37,14 @@
True
+
+ True
+ \
+
-
+
diff --git a/Open.Serialization.Json.Newtonsoft/SerializationExtensions.cs b/Open.Serialization.Json.Newtonsoft/SerializationExtensions.cs
index 02b4d69..4b940ec 100644
--- a/Open.Serialization.Json.Newtonsoft/SerializationExtensions.cs
+++ b/Open.Serialization.Json.Newtonsoft/SerializationExtensions.cs
@@ -8,6 +8,9 @@
namespace Open.Serialization.Json.Newtonsoft;
+///
+/// Extensions for Newtonsof.Json serialization with Open.Serialization.Json.
+///
public static class SerializationExtensions
{
///
diff --git a/Open.Serialization.Json.System/CamelCaseJson.cs b/Open.Serialization.Json.System/CamelCaseJson.cs
index b4abc23..c9a3dd3 100644
--- a/Open.Serialization.Json.System/CamelCaseJson.cs
+++ b/Open.Serialization.Json.System/CamelCaseJson.cs
@@ -2,8 +2,14 @@
namespace Open.Serialization.Json.System;
+///
+/// Provides default 'camel case' serialization configurations.
+///
public static class CamelCaseJson
{
+ ///
+ /// Default relaxed serializations.
+ ///
public static JsonSerializerOptions Default(bool indent = false)
{
var options = RelaxedJson.Options(indent);
@@ -11,10 +17,9 @@ public static JsonSerializerOptions Default(bool indent = false)
return options;
}
+ ///
+ /// Default relaxed serializations but also ignores null values.
+ ///
public static JsonSerializerOptions Minimal(bool indent = false)
- {
- var options = Default(indent);
- options.IgnoreNullValues = true;
- return options;
- }
+ => Default(indent).SetIgnoreNullValues();
}
diff --git a/Open.Serialization.Json.System/CaseSensitiveJson.cs b/Open.Serialization.Json.System/CaseSensitiveJson.cs
index f9f4920..16c0bbc 100644
--- a/Open.Serialization.Json.System/CaseSensitiveJson.cs
+++ b/Open.Serialization.Json.System/CaseSensitiveJson.cs
@@ -2,15 +2,20 @@
namespace Open.Serialization.Json.System;
+///
+/// Provides default 'case sensitive' serialization configurations.
+///
public static class CaseSensitiveJson
{
+ ///
+ /// Default relaxed serializations.
+ ///
public static JsonSerializerOptions Default(bool indent = false)
=> RelaxedJson.Options(indent, true);
+ ///
+ /// Default relaxed serializations but also ignores null values.
+ ///
public static JsonSerializerOptions Minimal(bool indent = false)
- {
- var options = Default(indent);
- options.IgnoreNullValues = true;
- return options;
- }
+ => Default(indent).SetIgnoreNullValues();
}
diff --git a/Open.Serialization.Json.System/Converters/JsonDecimalConverter.cs b/Open.Serialization.Json.System/Converters/JsonDecimalConverter.cs
index 31ff0af..d80557f 100644
--- a/Open.Serialization.Json.System/Converters/JsonDecimalConverter.cs
+++ b/Open.Serialization.Json.System/Converters/JsonDecimalConverter.cs
@@ -4,19 +4,30 @@
namespace Open.Serialization.Json.System.Converters;
+///
+/// Converter for decimals.
+///
public class JsonDecimalConverter : JsonValueConverterBase
{
+ ///
+ /// Constructs a .
+ ///
protected JsonDecimalConverter()
{
// Prevent unnecessary replication.
}
+ ///
+ /// The shared instance of a .
+ ///
public static readonly JsonDecimalConverter Instance
= new();
+ ///
public override decimal Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
=> reader.GetDecimal();
+ ///
public override void Write(Utf8JsonWriter writer, decimal value, JsonSerializerOptions options)
{
if (writer is null) throw new ArgumentNullException(nameof(writer));
diff --git a/Open.Serialization.Json.System/Converters/JsonDecimalRoundingConverter.cs b/Open.Serialization.Json.System/Converters/JsonDecimalRoundingConverter.cs
index 06bc3ed..d2757cb 100644
--- a/Open.Serialization.Json.System/Converters/JsonDecimalRoundingConverter.cs
+++ b/Open.Serialization.Json.System/Converters/JsonDecimalRoundingConverter.cs
@@ -3,9 +3,21 @@
namespace Open.Serialization.Json.System.Converters;
+///
+/// Converter for decimals that rounds to a maximum number of digits after the decimal.
+///
public class JsonDecimalRoundingConverter : JsonDecimalConverter
{
+ ///
+ /// The maximum number of digits after the decimal.
+ ///
public int Maximum { get; }
+
+ ///
+ /// Constructs a .
+ ///
+ /// The maximum number of digits after the decimal.
+ /// If the maximum is less than zero.
public JsonDecimalRoundingConverter(int maximum)
{
if (maximum < 0)
@@ -13,9 +25,11 @@ public JsonDecimalRoundingConverter(int maximum)
Maximum = maximum;
}
+ ///
public override decimal Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
=> Math.Round(reader.GetDecimal(), Maximum);
+ ///
public override void Write(Utf8JsonWriter writer, decimal value, JsonSerializerOptions options)
=> base.Write(writer, Math.Round(value, Maximum), options);
}
diff --git a/Open.Serialization.Json.System/Converters/JsonDoubleRoundingConverter.cs b/Open.Serialization.Json.System/Converters/JsonDoubleRoundingConverter.cs
index 9798c04..6773d44 100644
--- a/Open.Serialization.Json.System/Converters/JsonDoubleRoundingConverter.cs
+++ b/Open.Serialization.Json.System/Converters/JsonDoubleRoundingConverter.cs
@@ -14,9 +14,11 @@ public JsonDoubleRoundingConverter(int maximum)
Maximum = maximum;
}
+ ///
public override double Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
=> Math.Round(reader.GetDouble(), Maximum);
+ ///
public override void Write(Utf8JsonWriter writer, double value, JsonSerializerOptions options)
{
if (writer is null) throw new ArgumentNullException(nameof(writer));
diff --git a/Open.Serialization.Json.System/Converters/JsonNullableDecimalConverter.cs b/Open.Serialization.Json.System/Converters/JsonNullableDecimalConverter.cs
index 8d30d58..941ea13 100644
--- a/Open.Serialization.Json.System/Converters/JsonNullableDecimalConverter.cs
+++ b/Open.Serialization.Json.System/Converters/JsonNullableDecimalConverter.cs
@@ -15,9 +15,11 @@ protected JsonNullableDecimalConverter()
public static readonly JsonNullableDecimalConverter Instance
= new();
+ ///
public override bool CanConvert(Type objectType)
=> objectType == typeof(decimal?) || objectType == typeof(decimal);
+ ///
public override decimal? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
=> reader.TokenType switch
{
@@ -26,6 +28,7 @@ public override bool CanConvert(Type objectType)
_ => throw new JsonException("Unexpected token type."),
};
+ ///
public override void Write(Utf8JsonWriter writer, decimal? value, JsonSerializerOptions options)
{
if (writer is null) throw new ArgumentNullException(nameof(writer));
diff --git a/Open.Serialization.Json.System/Converters/JsonNullableDecimalRoundingConverter.cs b/Open.Serialization.Json.System/Converters/JsonNullableDecimalRoundingConverter.cs
index 1b4255f..9c86c7e 100644
--- a/Open.Serialization.Json.System/Converters/JsonNullableDecimalRoundingConverter.cs
+++ b/Open.Serialization.Json.System/Converters/JsonNullableDecimalRoundingConverter.cs
@@ -14,11 +14,13 @@ public JsonNullableDecimalRoundingConverter(int maximum)
Maximum = maximum;
}
+ ///
public override decimal? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
=> reader.TokenType == JsonTokenType.Number
? Math.Round(reader.GetDecimal(), Maximum)
: base.Read(ref reader, typeToConvert, options);
+ ///
public override void Write(Utf8JsonWriter writer, decimal? value, JsonSerializerOptions options)
{
if (value.HasValue)
diff --git a/Open.Serialization.Json.System/Converters/JsonNullableDoubleRoundingConverter.cs b/Open.Serialization.Json.System/Converters/JsonNullableDoubleRoundingConverter.cs
index ea02ade..41f9384 100644
--- a/Open.Serialization.Json.System/Converters/JsonNullableDoubleRoundingConverter.cs
+++ b/Open.Serialization.Json.System/Converters/JsonNullableDoubleRoundingConverter.cs
@@ -13,11 +13,13 @@ public JsonNullableDoubleRoundingConverter(int maximum)
Maximum = maximum;
}
+ ///
public override double? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
=> reader.TokenType == JsonTokenType.Number
? Math.Round(reader.GetDouble(), Maximum)
: base.Read(ref reader, typeToConvert, options);
+ ///
public override void Write(Utf8JsonWriter writer, double? value, JsonSerializerOptions options)
{
if (value.HasValue)
diff --git a/Open.Serialization.Json.System/Converters/JsonValueConverterBase.cs b/Open.Serialization.Json.System/Converters/JsonValueConverterBase.cs
index aee6ded..f0d66ea 100644
--- a/Open.Serialization.Json.System/Converters/JsonValueConverterBase.cs
+++ b/Open.Serialization.Json.System/Converters/JsonValueConverterBase.cs
@@ -3,8 +3,11 @@
namespace Open.Serialization.Json.System.Converters;
+/// Base class for other json value converters.
+///
public abstract class JsonValueConverterBase : JsonConverter
{
+ ///
public override bool CanConvert(Type objectType)
=> objectType == typeof(T);
}
diff --git a/Open.Serialization.Json.System/Open.Serialization.Json.System.csproj b/Open.Serialization.Json.System/Open.Serialization.Json.System.csproj
index f671a5b..283398b 100644
--- a/Open.Serialization.Json.System/Open.Serialization.Json.System.csproj
+++ b/Open.Serialization.Json.System/Open.Serialization.Json.System.csproj
@@ -29,7 +29,7 @@
-
+
@@ -44,9 +44,9 @@
-
+
-
+
diff --git a/Open.Serialization.Json.System/RelaxedJson.cs b/Open.Serialization.Json.System/RelaxedJson.cs
index 43147b3..6bb2086 100644
--- a/Open.Serialization.Json.System/RelaxedJson.cs
+++ b/Open.Serialization.Json.System/RelaxedJson.cs
@@ -23,10 +23,13 @@ static readonly JsonSerializerOptions DeserializerOptions
public static IJsonDeserialize GetDeserializer()
=> DeserializerOptions.GetSerializer();
+
public static IJsonDeserialize GetDeserializer()
=> DeserializerOptions.GetSerializer();
+
public static TValue Deserialize(string? value)
=> DeserializerOptions.Deserialize(value!);
+
public static TValue Deserialize(ReadOnlySpan value)
=> DeserializerOptions.Deserialize(value);
}
diff --git a/Open.Serialization.Json.System/SerializationsExtensions.cs b/Open.Serialization.Json.System/SerializationsExtensions.cs
index b90c503..631548f 100644
--- a/Open.Serialization.Json.System/SerializationsExtensions.cs
+++ b/Open.Serialization.Json.System/SerializationsExtensions.cs
@@ -9,6 +9,9 @@
namespace Open.Serialization.Json.System;
+///
+/// Extensions for System.Text.Json serialization with Open.Serialization.Json.
+///
public static class SerializationsExtensions
{
///
@@ -36,33 +39,70 @@ public static IServiceCollection AddJsonSerializer(this IServiceCollection se
return services;
}
+ ///
+ /// Returns a delegate that can deserialize with the given options.
+ ///
public static Func GetDeserialize(this JsonSerializerOptions options)
=> json => JsonSerializer.Deserialize(json, options)!;
+ ///
+ /// Returns a delegate that can serialze a to with the given options.
+ ///
public static Func GetSerialize(this JsonSerializerOptions options)
=> item => JsonSerializer.Serialize(item, options)!;
+ ///
+ /// Returns a delegate that can serialze a to an with the given options.
+ ///
public static Func