using System.Collections;
using System.Collections.Generic;
using System.Text.Json.Serialization;
using System.Text.Json.Serialization.Metadata;
using System.Text.Json.Nodes;
public class MyClass : IJsonOnDeserialized
public Dictionary<string, int> MyDictionary { get; set; }
public MyClass() : this(new()) { }
public MyClass(Dictionary<string, int> MyDictionary)
this.MyDictionary= MyDictionary;
InitialDictionaryCount = MyDictionary.Count;
void IJsonOnDeserialized.OnDeserialized() => DoSetup();
public int InitialDictionaryCount { get; private set; }
public MyClass MyClass { get; set; }
public Dictionary<string, int> MyClassDictionary {
get => MyClass?.MyDictionary;
if (value != MyClass?.MyDictionary)
throw new InvalidOperationException();
public static void Test()
var options = new JsonSerializerOptions
ReferenceHandler = ReferenceHandler.Preserve,
var json = JsonSerializer.Serialize(root, options);
var root2 = JsonSerializer.Deserialize<Root>(json, options);
Assert.That(root2?.MyClass.MyDictionary == root2.MyClassDictionary);
Assert.That(root2?.MyClass?.InitialDictionaryCount == 2);
public static void Main()
Console.WriteLine("Environment version: {0} ({1}), {2}", System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription , Environment.Version, Environment.OSVersion);
Console.WriteLine("System.Text.Json version: " + typeof(JsonSerializer).Assembly.FullName);
Console.WriteLine("Failed with unhandled exception: ");