title: JSON with classes?
body: <p>Is there a standardized way to store classes in JSON, and then converting them back into classes again from a string? For example, I might have an array of objects of type Questions. I'd like to serialize this to JSON and send it to (for example) a JavaScript page, which would convert the JSON string back into objects. But it should then be able to convert the Questions into objects of type Question, using the constructor I already have:</p>
  
  <pre><code>function Question(id, title, description){
  
  }
  </code></pre>
  
  <p>Is there a standardized way to do this? I have a few ideas on how to do it, but reinventing the wheel and so on.</p>
  
  <h2>Edit:</h2>
  
  <p>To clarify what I mean by classes: Several languages can use classes (JAVA, PHP, C#) and they will often communicate with JavaScript through JSON. On the server side, data is stored in instances of classes, but when you serialize them, this is lost. Once deserialized, you end up with an object structure that do not indicate what type of objects you have. JavaScript supports prototypal OOP, and you can create objects from constructors which will become typeof that constructor, for example Question above. The idea I had would be to have classes implement a JSONType interface, with two functions:</p>
  
  <pre><code>public interface JSONType{
    public String jsonEncode();//Returns serialized JSON string
    public static JSONType jsonDecode(String json);
  }
  </code></pre>
  
  <p>For example, the Question class would implement JSONType, so when I serialize my array, it would call jsonEncode for each element in that array (it detects that it implements JSONType). The result would be something like this:</p>
  
  <pre><code>[{typeof:"Question", id:0, title:"Some Question", description:"blah blah blah"},
   {typeof:"Question", id:0, title:"Some Question", description:"blah blah blah"},
   {typeof:"Question", id:0, title:"Some Question", description:"blah blah blah"}]
  </code></pre>
  
  <p>The javascript code would then see the typeof attribute, and would look for a Question function, and would then call a static function on the Question object, similar to the interface above (yes, I realize there is a XSS security hole here). The jsonDecode object would return an object of type Question, and would recursively decode the JSON values (eg, there could be a comment value which is an array of Comments).</p>