{"id":1250,"date":"2012-05-17T10:00:00","date_gmt":"2012-05-17T10:00:00","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/2012\/10\/json-for-polymorphic-java-object-serialization.html"},"modified":"2012-10-22T05:10:11","modified_gmt":"2012-10-22T05:10:11","slug":"json-for-polymorphic-java-object","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2012\/05\/json-for-polymorphic-java-object.html","title":{"rendered":"JSON for polymorphic Java object serialization"},"content":{"rendered":"<div dir=\"ltr\" style=\"text-align: left\"> For a long time now JSON is a de facto standard for all kinds of data serialization between client and server. Among other, its strengths are simplicity and human-readability. But with simplicity comes some limitations, one of them I would like to talk about today: storing and retrieving polymorphic Java objects.    <\/p>\n<p> Let&#8217;s start with simple problem: a hierarchy of filters. There is one abstract class <strong>AbstractFilter<\/strong> and two subclasses, <strong>RegexFilter<\/strong> and <strong>StringMatchFilter<\/strong>.   <\/p>\n<pre class=\"brush:java\">\r\npackage bean.json.examples;\r\n\r\npublic abstract class AbstractFilter {\r\n    public abstract void filter();\r\n}\r\n<\/pre>\n<p>   Here is <strong>RegexFilter<\/strong> class:   <\/p>\n<pre class=\"brush:java\">\r\npackage bean.json.examples;\r\n\r\npublic class RegexFilter extends AbstractFilter {\r\n    private String pattern;\r\n\r\n    public RegexFilter( final String pattern ) {\r\n        this.pattern = pattern;\r\n    }\r\n\r\n    public void setPattern( final String pattern ) {\r\n        this.pattern = pattern;\r\n    }\r\n\r\n    public String getPattern() {\r\n        return pattern;\r\n    }\r\n\r\n    @Override\r\n    public void filter() {\r\n        \/\/ Do some work here\r\n    }\r\n}\r\n<\/pre>\n<p>   And here is <strong>StringMatchFilter <\/strong> class:   <\/p>\n<pre class=\"brush:java\">\r\npackage bean.json.examples;\r\n\r\npublic class StringMatchFilter extends AbstractFilter {\r\n    private String[] matches;\r\n    private boolean caseInsensitive;\r\n\r\n    public StringMatchFilter() {\r\n    }\r\n\r\n    public StringMatchFilter( final String[] matches, final boolean caseInsensitive ) {\r\n        this.matches = matches;\r\n        this.caseInsensitive = caseInsensitive;\r\n    }\r\n\r\n    public String[] getMatches() {\r\n        return matches;\r\n    }\r\n\r\n    public void setCaseInsensitive( final boolean caseInsensitive ) {\r\n        this.caseInsensitive = caseInsensitive;\r\n    }\r\n\r\n    public void setMatches( final String[] matches ) {\r\n        this.matches = matches;\r\n    }\r\n\r\n    public boolean isCaseInsensitive() {\r\n        return caseInsensitive;\r\n    }\r\n\r\n    @Override\r\n    public void filter() {\r\n        \/\/ Do some work here\r\n    }\r\n}\r\n<\/pre>\n<p> Nothing fancy, pure Java beans. Now what if we need to store list of <strong>AbstractFilter<\/strong> instances to JSON, and more importantly, to reconstruct this list back from JSON? Following class <strong>Filters<\/strong> demonstrates what I mean:   <div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<pre class=\"brush:java\">\r\npackage bean.json.examples;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.Arrays;\r\nimport java.util.Collection;\r\n\r\npublic class Filters {\r\n    private Collection&lt; AbstractFilter &gt; filters = new ArrayList&lt; AbstractFilter &gt;();\r\n\r\n    public Filters() {\r\n    }\r\n\r\n    public Filters( final AbstractFilter ... filters ) {\r\n        this.filters.addAll( Arrays.asList( filters ) );\r\n    }\r\n\r\n    public Collection&lt; AbstractFilter &gt; getFilters() {\r\n        return filters;\r\n    }\r\n\r\n    public void setFilters( final Collection&lt; AbstractFilter &gt; filters ) {\r\n        this.filters = filters;\r\n    }\r\n}\r\n<\/pre>\n<p>   As JSON is textual, platform-independent format, it doesn&#8217;t carry any type specific information. Thanks to awesome <a href=\"http:\/\/jackson.codehaus.org\/\">Jackson<\/a> JSON processor it could be easily done. So let&#8217;s add <a href=\"http:\/\/jackson.codehaus.org\/\">Jackson<\/a> JSON processor to our POM file:   <\/p>\n<pre class=\"brush:xml\">\r\n\r\n &lt;project&gt;\r\n    \r\n  &lt;modelversion&gt;\r\n   4.0.0\r\n  &lt;\/modelversion&gt;\r\n\r\n    \r\n  &lt;groupid&gt;\r\n   bean.json\r\n  &lt;\/groupid&gt;\r\n    \r\n  &lt;artifactid&gt;\r\n   examples\r\n  &lt;\/artifactid&gt;\r\n    \r\n  &lt;version&gt;\r\n   0.0.1-SNAPSHOT\r\n  &lt;\/version&gt;\r\n    \r\n  &lt;packaging&gt;\r\n   jar\r\n  &lt;\/packaging&gt;\r\n\r\n    \r\n  &lt;properties&gt;\r\n        \r\n   &lt;project.build.sourceencoding&gt;\r\n    UTF-8\r\n   &lt;\/project.build.sourceencoding&gt;\r\n    \r\n  &lt;\/properties&gt;\r\n\r\n    \r\n  &lt;dependencies&gt;\r\n        \r\n   &lt;dependency&gt;\r\n            \r\n    &lt;groupid&gt;\r\n     org.codehaus.jackson\r\n    &lt;\/groupid&gt;\r\n            \r\n    &lt;artifactid&gt;\r\n     jackson-mapper-asl\r\n    &lt;\/artifactid&gt;\r\n            \r\n    &lt;version&gt;\r\n     1.9.6\r\n    &lt;\/version&gt;\r\n        \r\n   &lt;\/dependency&gt;\r\n    \r\n  &lt;\/dependencies&gt;\r\n\r\n &lt;\/project&gt;\r\n<\/pre>\n<p> Having this step done, we need to tell <a href=\"http:\/\/jackson.codehaus.org\/\">Jackson<\/a> that we have an intention to store the type information together with our objects in JSON so it would be possible to reconstruct exact objects from JSON later. Few annotations on <strong>AbstractFilter<\/strong> do exactly that.   <\/p>\n<pre class=\"brush:java\">\r\nimport org.codehaus.jackson.annotate.JsonSubTypes;\r\nimport org.codehaus.jackson.annotate.JsonSubTypes.Type;\r\nimport org.codehaus.jackson.annotate.JsonTypeInfo;\r\nimport org.codehaus.jackson.annotate.JsonTypeInfo.Id;\r\n\r\n@JsonTypeInfo( use = Id.NAME )\r\n@JsonSubTypes(\r\n    {\r\n        @Type( name = &quot;Regex&quot;, value = RegexFilter.class ),\r\n        @Type( name = &quot;StringMatch&quot;, value = StringMatchFilter.class )\r\n    }\r\n)\r\npublic abstract class AbstractFilter {\r\n    \/\/ ...\r\n}\r\n<\/pre>\n<p> And &#8230; that&#8217;s it! Following helper class does the dirty job of serializing filters to string and deserializing them back from string using <a href=\"http:\/\/jackson.codehaus.org\/\">Jackson&#8217;s<\/a> <strong>ObjectMapper<\/strong>:   <\/p>\n<pre class=\"brush:java\">\r\npackage bean.json.examples;\r\n\r\nimport java.io.IOException;\r\nimport java.io.StringReader;\r\nimport java.io.StringWriter;\r\n\r\nimport org.codehaus.jackson.map.ObjectMapper;\r\n\r\npublic class FilterSerializer {\r\n    private final ObjectMapper mapper = new ObjectMapper();\r\n\r\n    public String serialize( final Filters filters ) {\r\n        final StringWriter writer = new StringWriter();\r\n        try {\r\n            mapper.writeValue( writer, filters );\r\n            return writer.toString();\r\n        } catch( final IOException ex ) {\r\n            throw new RuntimeException( ex.getMessage(), ex );\r\n        } finally {\r\n            try { writer.close(); } catch ( final IOException ex ) { \/* Nothing to do here *\/ }\r\n        }\r\n    }\r\n\r\n    public Filters deserialize( final String str ) {\r\n        final StringReader reader = new StringReader( str );\r\n        try {\r\n            return mapper.readValue( reader, Filters.class );\r\n        } catch( final IOException ex ) {\r\n            throw new RuntimeException( ex.getMessage(), ex );\r\n        } finally {\r\n            reader.close();\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p> Let&#8217;s see this in action. Following code example   <\/p>\n<pre class=\"brush:java\">\r\nfinal String json = new FilterSerializer().serialize(\r\n    new Filters(\r\n        new RegexFilter( &quot;\\\\d+&quot; ),\r\n        new StringMatchFilter( new String[] { &quot;String1&quot;, &quot;String2&quot; }, true )\r\n    )\r\n);\r\n<\/pre>\n<p> produces following JSON:  <\/p>\n<pre class=\"brush:java\">\r\n{ &quot;filters&quot;:\r\n  [\r\n     {&quot;@type&quot;:&quot;Regex&quot;,&quot;pattern&quot;:&quot;\\\\d+&quot;},\r\n     {&quot;@type&quot;:&quot;StringMatch&quot;,&quot;matches&quot;:[&quot;String1&quot;,&quot;String2&quot;],&quot;caseInsensitive&quot;:true}\r\n  ]\r\n}\r\n<\/pre>\n<p> As you can see, each entry in <strong>&quot;filters&quot;<\/strong> collection has property <strong>&quot;@type&quot;<\/strong> which has the value we have specified by annotating <strong>AbstractFilter<\/strong> class. Calling <strong>new FilterSerializer().deserialize( json )<\/strong> produces exactly the same <strong>Filters<\/strong> object instance.   <\/p>\n<p><strong><i>Reference: <\/i><\/strong><a href=\"http:\/\/aredko.blogspot.com\/2012\/04\/json-for-polymorhic-java-object.html\">JSON for polymorphic Java object serialization<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/p\/jcg.html\">JCG partner<\/a> Andrey Redko at the <a href=\"http:\/\/aredko.blogspot.com\/\">Andriy Redko {devmind} <\/a> blog.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>For a long time now JSON is a de facto standard for all kinds of data serialization between client and server. Among other, its strengths are simplicity and human-readability. But with simplicity comes some limitations, one of them I would like to talk about today: storing and retrieving polymorphic Java objects. Let&#8217;s start with simple &hellip;<\/p>\n","protected":false},"author":141,"featured_media":175,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[69,65],"class_list":["post-1250","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-json","tag-serialization"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>JSON for polymorphic Java object serialization - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"For a long time now JSON is a de facto standard for all kinds of data serialization between client and server. Among other, its strengths are simplicity\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2012\/05\/json-for-polymorphic-java-object.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JSON for polymorphic Java object serialization - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"For a long time now JSON is a de facto standard for all kinds of data serialization between client and server. Among other, its strengths are simplicity\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2012\/05\/json-for-polymorphic-java-object.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2012-05-17T10:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-10-22T05:10:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/json-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Andrey Redko\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andrey Redko\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/json-for-polymorphic-java-object.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/json-for-polymorphic-java-object.html\"},\"author\":{\"name\":\"Andrey Redko\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/771a6504862edc45322776832cbce413\"},\"headline\":\"JSON for polymorphic Java object serialization\",\"datePublished\":\"2012-05-17T10:00:00+00:00\",\"dateModified\":\"2012-10-22T05:10:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/json-for-polymorphic-java-object.html\"},\"wordCount\":299,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/json-for-polymorphic-java-object.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/json-logo.jpg\",\"keywords\":[\"JSON\",\"Serialization\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/json-for-polymorphic-java-object.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/json-for-polymorphic-java-object.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/json-for-polymorphic-java-object.html\",\"name\":\"JSON for polymorphic Java object serialization - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/json-for-polymorphic-java-object.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/json-for-polymorphic-java-object.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/json-logo.jpg\",\"datePublished\":\"2012-05-17T10:00:00+00:00\",\"dateModified\":\"2012-10-22T05:10:11+00:00\",\"description\":\"For a long time now JSON is a de facto standard for all kinds of data serialization between client and server. Among other, its strengths are simplicity\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/json-for-polymorphic-java-object.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/json-for-polymorphic-java-object.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/json-for-polymorphic-java-object.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/json-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/json-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/json-for-polymorphic-java-object.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"JSON for polymorphic Java object serialization\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/771a6504862edc45322776832cbce413\",\"name\":\"Andrey Redko\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/16419ce8394173028eddaeb992859862bab50cfcf74589fa9bb9a3dd8bb27518?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/16419ce8394173028eddaeb992859862bab50cfcf74589fa9bb9a3dd8bb27518?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/16419ce8394173028eddaeb992859862bab50cfcf74589fa9bb9a3dd8bb27518?s=96&d=mm&r=g\",\"caption\":\"Andrey Redko\"},\"description\":\"Andriy is a well-grounded software developer with more then 12 years of practical experience using Java\\\/EE, C#\\\/.NET, C++, Groovy, Ruby, functional programming (Scala), databases (MySQL, PostgreSQL, Oracle) and NoSQL solutions (MongoDB, Redis).\",\"sameAs\":[\"http:\\\/\\\/aredko.blogspot.com\\\/\",\"http:\\\/\\\/ca.linkedin.com\\\/in\\\/aredko\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/andrey-redko\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"JSON for polymorphic Java object serialization - Java Code Geeks","description":"For a long time now JSON is a de facto standard for all kinds of data serialization between client and server. Among other, its strengths are simplicity","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2012\/05\/json-for-polymorphic-java-object.html","og_locale":"en_US","og_type":"article","og_title":"JSON for polymorphic Java object serialization - Java Code Geeks","og_description":"For a long time now JSON is a de facto standard for all kinds of data serialization between client and server. Among other, its strengths are simplicity","og_url":"https:\/\/www.javacodegeeks.com\/2012\/05\/json-for-polymorphic-java-object.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2012-05-17T10:00:00+00:00","article_modified_time":"2012-10-22T05:10:11+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/json-logo.jpg","type":"image\/jpeg"}],"author":"Andrey Redko","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Andrey Redko","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/json-for-polymorphic-java-object.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/json-for-polymorphic-java-object.html"},"author":{"name":"Andrey Redko","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/771a6504862edc45322776832cbce413"},"headline":"JSON for polymorphic Java object serialization","datePublished":"2012-05-17T10:00:00+00:00","dateModified":"2012-10-22T05:10:11+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/json-for-polymorphic-java-object.html"},"wordCount":299,"commentCount":1,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/json-for-polymorphic-java-object.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/json-logo.jpg","keywords":["JSON","Serialization"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2012\/05\/json-for-polymorphic-java-object.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/json-for-polymorphic-java-object.html","url":"https:\/\/www.javacodegeeks.com\/2012\/05\/json-for-polymorphic-java-object.html","name":"JSON for polymorphic Java object serialization - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/json-for-polymorphic-java-object.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/json-for-polymorphic-java-object.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/json-logo.jpg","datePublished":"2012-05-17T10:00:00+00:00","dateModified":"2012-10-22T05:10:11+00:00","description":"For a long time now JSON is a de facto standard for all kinds of data serialization between client and server. Among other, its strengths are simplicity","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/json-for-polymorphic-java-object.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2012\/05\/json-for-polymorphic-java-object.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/json-for-polymorphic-java-object.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/json-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/json-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/json-for-polymorphic-java-object.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"JSON for polymorphic Java object serialization"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/771a6504862edc45322776832cbce413","name":"Andrey Redko","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/16419ce8394173028eddaeb992859862bab50cfcf74589fa9bb9a3dd8bb27518?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/16419ce8394173028eddaeb992859862bab50cfcf74589fa9bb9a3dd8bb27518?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/16419ce8394173028eddaeb992859862bab50cfcf74589fa9bb9a3dd8bb27518?s=96&d=mm&r=g","caption":"Andrey Redko"},"description":"Andriy is a well-grounded software developer with more then 12 years of practical experience using Java\/EE, C#\/.NET, C++, Groovy, Ruby, functional programming (Scala), databases (MySQL, PostgreSQL, Oracle) and NoSQL solutions (MongoDB, Redis).","sameAs":["http:\/\/aredko.blogspot.com\/","http:\/\/ca.linkedin.com\/in\/aredko"],"url":"https:\/\/www.javacodegeeks.com\/author\/andrey-redko"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/1250","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/141"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=1250"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/1250\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/175"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=1250"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=1250"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=1250"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}