I am trying to serialize a tree but I only need a tiny part of the data of the object (its a UI tree), so I wrote a custom converter.
The converter simply passes the reader and writer to the object
public override void WriteJson(JsonWriter writer, NavTree value, JsonSerializer serializer)
{
    value.SaveAsJson(writer);
}
public override NavTree ReadJson(JsonReader reader, Type objectType, NavTree existingValue, bool hasExistingValue,
    JsonSerializer serializer)
{
    NavTree tree = hasExistingValue ? existingValue : new NavTree();
    tree.LoadFromJson(reader);
    return tree;
}
Serialization looks like this
public void SaveAsJson(JsonWriter writer)
{
    SerializableTreeItem root = new (this.GetRoot());
    JObject.FromObject(root).WriteTo(writer);
}
The object appears to serialize yielding json that looks something like
"NavTree": {
    "Id": "All",
    "IsCategory": true,
    "Children": [
      {
        "Id": "https://popularresistance.org/feed/",
        "IsCategory": false,
        "Children": []
      },
      {
        "Id": "https://www.aljazeera.com/xml/rss/all.xml",
        "IsCategory": false,
        "Children": []
      },
      ... more children
The deserialization looks like:
public void LoadFromJson(JsonReader reader)
{
    SerializableTreeItem loaded =
        JsonConvert.DeserializeObject<SerializableTreeItem>((string)reader.Value ?? string.Empty);
    if (loaded == null) return;
    if (this.GetRoot() != null)
    {
        this.GetRoot().Free();
        TreeItem root = this.CreateItem();
        root.SetMetadata(0, RootMetaDataId);
    }
    this.AddItem(loaded, this.GetRoot());
}
Trying to access reader.Value at the start of the function returns null. Trying to access reader.ReadAsString() at the start results in:
Newtonsoft.Json.JsonReaderException: Unexpected state: ObjectStart. Path 'NavTree', line 669, position 14.
   at Newtonsoft.Json.JsonTextReader.ReadStringValue(ReadType readType)
   at Newtonsoft.Json.JsonTextReader.ReadAsString()
   at Porifera.NavTree.LoadFromJson(JsonReader reader)
Line 669 is the first line of the json posted above. I never made a custom converter before so clearly I messed it up. The question is what did I do wrong? The json looks ok to me and all I really need is for the reader to deliver something and I can reconstruct the object.
 
    