title: how-to persist JSON into Grails domain objects with nested members
body: <p>Given these domain classes:</p>
  
  <pre><code>class Person {
      Long id
      String name
  
      static hasMany = [aliases: PersonAlias]
  }
  
  class PersonAlias {
      Person person
      Long id
      String name
  }
  </code></pre>
  
  <p>I try to do a straight-forward round trip load/save through JSON land:</p>
  
  <pre><code>Person p = Person.get(20005353);
  def json = p as JSON
  def str = json as String
  def map = JSON.parse(str)
  p.properties = map
  p.save(flush:true)
  </code></pre>
  
  <p>which produces this JSON</p>
  
  <pre><code>{
    "id": 20005353,
    "name": "John Smith",
    "class": "Person",
    "aliases":
    [
      {
        "class": "PersonAlias",
        "id": 99,
        "name": "J. Smith"
      }
    ]
  }
  </code></pre>
  
  <p>And fails with this error:</p>
  
  <blockquote>
    <p>grails.validation.ValidationErrors: 1 errors Field error in object
    'heavymeta.Person' on field 'aliases': rejected value [[]]; codes
    [typeMismatch.heavymeta.Person.aliases,typeMismatch.aliases,typeMismatch.java.util.Set,typeMismatch];
    arguments
    [org.springframework.context.support.DefaultMessageSourceResolvable:
    codes [heavymeta.Person.aliases,aliases]; arguments []; default
    message [aliases]]; default message [Failed to convert property value
    of type 'org.codehaus.groovy.grails.web.json.JSONArray' to required
    type 'java.util.Set' for property 'aliases'; nested exception is
    java.lang.IllegalStateException: Cannot convert value of type
    [java.util.LinkedHashMap] to required type [heavymeta.PersonAlias] for
    property 'aliases[0]': no matching editors or conversion strategy
    found]</p>
  </blockquote>
  
  <p>Why does this fail, and is there a way to make it work?</p>