http://qs321.pair.com?node_id=11120928


in reply to How to encode/decode a class inside a class in JSON

Well, the root cause is that "plain" JSON actually doesn't know Perl objects: What JSON calls "objects", are actually hash references in Perl. Your TO_JSON method converts the inner object into a hash, but look closely at your output:

And we get output that looks good: {"NAME":"A instance","MY_CLASS_B":{"NAME":"B instance"}}

Actually, the output only appears to look good because you used "MY_CLASS_B" as the key in your object $a and as the class name for the object it contains. But look at your TO_JSON method: Actually, the class name MY_CLASS_B is missing from the serialized string, and therefore the deserializer couldn't bless the hash reference even if it wanted to.

That's why the either "tagging" or post-processing the JSON output, as mentioned in the section Object Serialization of the JSON docs, is required.