code: @Override
    public ISerializable afterDeserialization(ISerializable deserializedObject, Object serializationData)
        throws DDFException {
  
      try {
        if (!Strings.isNullOrEmpty(mUnitTypeName)) {
          mUnitType = Class.forName(mUnitTypeName);
        }
  
        if (mData != null) {
          this.setList(mData, mUnitType);
  
          // See if we need to "unwrap" this object and return the wrapped object instead
          JsonElement deserializedWrappedObject = (serializationData instanceof JsonObject ? //
              ((JsonObject) serializationData).get("mData")
              : null);
  
          deserializedObject = BasicPersistible.unwrapDeserializedObject(mData, deserializedObject,
              (JsonElement) deserializedWrappedObject);
        }
  
        return super.afterDeserialization(deserializedObject, serializationData);
  
      } catch (Exception e) {
        if (e instanceof DDFException) throw (DDFException) e;
        else throw new DDFException(e);
      }
    }
docs: Special case: if we hold a single object of type IPersistible, then some magic happens: we will return *that*
  object as a result of the deserialization, instead of this DDF itself. This makes it possible for clients to do
  things like<br/>
  <code>
  PersistenceUri uri = model.persist();
  Model model = (Model) ddfManager.load(uri);
  </code> instead of having to do this:<br/>
  <code>
  PersistenceUri uri = model.persist();
  BasicDDF ddf = (BasicDDF) ddfManager.load(uri);
  Model model = (Model) ddf.getList().get(0);
  </code>