Json.NET Custom JsonConverter with data types
<p>I stumbled upon a service that outputs JSON in the following format:</p>

<pre><code>{
    "Author": "me",
    "Version": "1.0.0",
    "data.Type1": {
        "Children": [
            {
                "data.Type1": {
                    "Children": [
                        {
                            "data.Type2": {
                                "name": "John",
                                "surname": "Doe"
                            }
                        }
                    ]
                }
            },
            {
                "data.Type3": {
                    "dob": "1990-01-01"
                }
            }
        ]
    }
}
</code></pre>

<p>Data type names are preserved as property names and their values are the actual objects. They all start with a <code>data.</code> prefix.</p>

<p>What I'd like to get afterwards is something like this:</p>

<pre><code>{ // Root
    "Author": "me",
    "Version": "1.0.0",
    "Children": [ // Type1
        {
            "Children": [ // Type1
                { // Type2
                    "Name": "John",
                    "Surname": "Doe"
                }
            ]
        },
        { // Type3
            "DoB": "1990-01-01"
        }
    ]
}
</code></pre>

<p>with the following classes:</p>

<pre><code>class Type1 {
    ICollection&lt;object&gt; Children { get; set; }
}

class Type2 {
    public string Name { get; set; }
    public string Surname { get; set; }
}

class Type3 {
    public DateTime DoB { get; set; }
}

class Root 
{
    public string Author { get; set; }
    public string Version { get; set; }
    public Type1 Children { get; set; }
}
</code></pre>

<p><strong>Question</strong></p>

<p>How can I deserialize this into added C# classes, taking into account the data types and removing them from the tree?</p>

<p>I've tried with a custom <code>JsonConverter</code>, but am struggling with how to dynamically choose the converter, since the easiest way would be to put an attribute on the property, but it is not supported.</p>

<p>A small example would be great.</p>