Strictly typed JSON representation I would like to be specific in parameter types or write something like this:

Test test = (Json&lt;Test&gt;)"{\"age\": 46}";


Where:

public class Test 
{
    public int Age { get; set; }
}


My helper is:

public struct Json&lt;T&gt; 
{
    public static implicit operator string(Json&lt;T&gt; json) =&gt; json.JObject.ToString();
    public static explicit operator Json&lt;T&gt;(string json) =&gt; new Json&lt;T&gt;(json);

    public static implicit operator T(Json&lt;T&gt; json) =&gt; json.JObject.ToObject&lt;T&gt;();
    public static implicit operator Json&lt;T&gt;(T obj) =&gt; new Json&lt;T&gt;(JObject.FromObject(obj));

    static readonly JObject Default = JObject.FromObject(new { });

    Json(string json) : this(JObject.Parse(json)) { } 
    Json(JObject jObject) : this() =&gt; _jObject = jObject ?? 
        throw new ArgumentNullException(nameof(jObject));

    JObject JObject =&gt; _jObject ?? Default;
    readonly JObject _jObject;
}
The missing part is a JsonConverter:

[JsonConverter(typeof(JsonTConverter))]
public struct Json&lt;T&gt; 
{


And:

public class JsonTConverter : JsonConverter
{
    public override bool CanConvert(Type objectType) =&gt;
        objectType.IsConstructedGenericType &amp;&amp;
        objectType.GetGenericTypeDefinition() == typeof(Json&lt;&gt;);

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) =&gt;
        Activator.CreateInstance(objectType, reader.Value);

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) =&gt;
        writer.WriteValue(value.ToString());
}