Why is Init a seperate thing? You should just use

    private ChatMessage(JToken json)
    { /* Implementation goes here */ }
    private ChatMessage(string json) : this(JToken.Parse(json))