Common interface + implementation for Json Converters:
public interface IJsonConverter
{
Task<T?> DeserializeAsync<T>(Stream stream, IJsonConverterOptions? options = null, CancellationToken cancellationToken = default);
T? Deserialize<T>(Stream stream, IJsonConverterOptions? options = null);
T? Deserialize<T>(string text, IJsonConverterOptions? options = null);
object? Deserialize(string text, Type type, JsonConverterOptions? options = null);
Task<string> SerializeAsync(object source, IJsonConverterOptions? options = null, CancellationToken cancellationToken = default);
string Serialize(object source, IJsonConverterOptions? options = null);
Task SerializeAsync(Stream stream, object value, JsonConverterOptions? options = null, CancellationToken cancellationToken = default);
Task<bool> IsValidJsonAsync(Stream stream, CancellationToken cancellationToken = default);
Task<bool> IsValidJsonAsync(string input, CancellationToken cancellationToken = default);
bool IsValidJson(Stream stream);
bool IsValidJson(string input);
/// <summary>
/// Convert an object to a DynamicJsonClass or DynamicJsonClass-array.
/// </summary>.
/// <param name="value">The object (e.g. JObject in case of Newtonsoft.Json).</param>
/// <param name="options">The <see cref="DynamicJsonClassOptions"/> (optional).</param>
/// <returns>object, DynamicJsonClass or DynamicJsonClass-array</returns>
object? ConvertToDynamicJsonClass(object value, DynamicJsonClassOptions? options = null);
/// <summary>
/// Convert Json Text to a DynamicJsonClass or DynamicJsonClass-array.
/// </summary>.
/// <param name="text">The Json Text.</param>
/// <param name="options">The <see cref="DynamicJsonClassOptions"/> (optional).</param>
/// <returns>object, DynamicJsonClass or DynamicJsonClass-array</returns>
object? DeserializeToDynamicJsonClass(string text, DynamicJsonClassOptions? options = null);
public class JsonConverterOptions
{
public bool PropertyNameCaseInsensitive { get; set; }
public bool WriteIndented { get; set; }
public bool IgnoreNullValues { get; set; }
}
public class DynamicJsonClassOptions
{
public JsonConverterOptions? JsonConverterOptions { get; set; }
public IntegerBehavior IntegerConvertBehavior { get; set; } = IntegerBehavior.UseLong;
public FloatBehavior FloatConvertBehavior { get; set; } = FloatBehavior.UseDouble;
}