Newtonsoft.Json
SuperStrong.Types integrates with Newtonsoft.Json. Strong types are serialized as their underlying primitives.
Requirements
This integration targets Newtonsoft.Json 13, so make sure your project uses it.
Installation
First, install the package from NuGet:
sh
dotnet add package SuperStrong.Types.NewtonsoftJson --version 1.0.0xml
<PackageReference Include="SuperStrong.Types.NewtonsoftJson" Version="1.0.0" />Setup
Strong types aren't annotated for Newtonsoft.Json automatically, so you need to add the converters yourself.
Register the converters on your serializer settings:
csharp
var settings = new JsonSerializerSettings
{
Converters =
{
new JsonStrongTypeConverter(),
new JsonStrongTypeDictionaryConverter(),
},
};Alternatively, use [JsonConverter(...)] on a strong type or dictionary member:
csharp
[StrongType<int>]
[JsonConverter(typeof(JsonStrongTypeConverter))]
public sealed partial class OrderId;csharp
public sealed class OrderDto
{
[JsonConverter(typeof(JsonStrongTypeDictionaryConverter))]
public Dictionary<OrderId, string> Tags { get; set; } = [];
}WARNING
Don't confuse these with the similarly named attribute and converters from System.Text.Json.
Serialization
Serialization writes the underlying primitive:
csharp
JsonConvert.SerializeObject(OrderId.From(1), settings); // 1Deserialization reads it back into the strong type:
csharp
JsonConvert.DeserializeObject<OrderId>("1", settings); // OrderId.From(1)TIP
When reading from JSON, values go through From(...), so they are always validated.
