Skip to content

Latest commit

 

History

History
58 lines (48 loc) · 1.85 KB

CustomJsonConverterGeneric.md

File metadata and controls

58 lines (48 loc) · 1.85 KB

Custom JsonConverter<T>

This sample creates a custom converter from <c>JsonConverter<T> that overrides serialization for the Version class with a custom display string.

public class VersionConverter : JsonConverter<Version>
{
    public override void WriteJson(JsonWriter writer, Version value, JsonSerializer serializer) =>
        writer.WriteValue(value.ToString());

    public override Version ReadJson(
        JsonReader reader,
        Type type,
        Version existing,
        bool hasExisting,
        JsonSerializer serializer)
    {
        var s = (string) reader.Value;

        return new(s);
    }
}

public class NuGetPackage
{
    public string PackageId { get; set; }
    public Version Version { get; set; }
}

snippet source | anchor

var p1 = new NuGetPackage
{
    PackageId = "Argon",
    Version = new(10, 0, 4)
};

var json = JsonConvert.SerializeObject(p1, Formatting.Indented, new VersionConverter());

Console.WriteLine(json);
// {
//   "PackageId": "Argon",
//   "Version": "10.0.4"
// }

var p2 = JsonConvert.DeserializeObject<NuGetPackage>(json, new VersionConverter());

Console.WriteLine(p2.Version.ToString());
// 10.0.4

snippet source | anchor