Trivial

JSON

Includes writable JSON DOM and lots of commonly used JSON converters.

In Trivial.Text namespace of Trivial.dll library.

JSON DOM

You can create a writable JSON DOM including JSON object JsonObjectNode and JSON array JsonArrayNode.

var json = new JsonObjectNode
{
    { "prop-a", 1234 },
    { "prop-b", "opq" },
    { "prop-c", true },
    { "prop-d", new JsonArrayNode { 5678, "rst" } }
};

You can also get or set the property of JSON object as you want.

var num = json.GetInt32Value("prop-a"); // 1234
var numStr = json.GetStringValue("prop-a"); // "1234"

json.SetValue("prop-a", 5678);
num = json.GetInt32Value("prop-a"); // 5678

For scenarios of concurrency, you can enable thread-safe mode.

json.EnableThreadSafeMode();

At last, you can write to an instance of System.Text.Json.Utf8JsonWriter by WriteTo member method or get the JSON format string by ToString member method.

var jsonStr = json.ToString(IndentStyles.Compact);

JSON converters

Includes a lot of useful JSON converters so that you can use System.Text.Json.Serialization.JsonConvertAttribute attribute to use for member properties of the model.

Following are date time related.

Converter .NET type JSON value kind (serialize/deserialize) Additional JSON value kind (deserialize only) Nullable
JsonJavaScriptTicksConverter DateTime JavaScript ticks number Date JSON string ×
JsonJavaScriptTicksConverter.NullableConverter DateTime? JavaScript ticks number Date JSON string
JsonJavaScriptTicksConverter.FallbackConverter DateTime Date JSON string JavaScript ticks number ×
JsonJavaScriptTicksConverter.FallbackNullableConverter DateTime? Date JSON string JavaScript ticks number
JsonUnixTimestampConverter DateTime Unix timestamp number Date JSON string ×
JsonUnixTimestampConverter.NullableConverter DateTime? Unix timestamp number Date JSON string
JsonUnixTimestampConverter.FallbackConverter DateTime Date JSON string Unix timestamp number ×
JsonUnixTimestampConverter.FallbackNullableConverter DateTime? Date JSON string Unix timestamp number

Following are number related.

Converter .NET type JSON value kind (serialize/deserialize) Additional JSON value kind (deserialize only) Nullable
JsonNumberConverter number types number number string
JsonNumberConverter.NumberStringConverter number types number string number
JsonNumberConverter.StrictConverter number types number number string ×

Following are string collection related.

Converter .NET type JSON value kind Nullable
JsonStringListConverter common class of IEnumerable<string> string or string[]
JsonStringListConverter.WhiteSpaceSeparatedConverter common class of IEnumerable<string> string or string[]
JsonStringListConverter.CommaSeparatedConverter common class of IEnumerable<string> string or string[]
JsonStringListConverter.SemicolonSeparatedConverter common class of IEnumerable<string> string or string[]
JsonStringListConverter.VerticalBarSeparatedConverter common class of IEnumerable<string> string or string[]

Following are others.

Converter .NET type JSON value kind Nullable
JsonObjectNodeConverter JsonObjectNode or JsonArrayNode object or array

For example.

public class Model
{
    [JsonConverter(typeof(JsonNumberConverter))
    public int Number { get; set; }

    [JsonPropertyName("creation")]
    [JsonConverter(typeof(JsonJavaScriptTicksConverter))
    public DateTime CreationTime { get; set; }

    [JsonConverter(typeof(JsonObjectNodeConverter)]
    public JsonObject Properties { get; set; }
}

Now you can deserialize following JSON.

{
    "number": "1234",
    "creation": 1577628663614,
    "properties": {
        "items": [ 5, 6, 7, "a", "b", "c" ]
        "b": true
    }
}