Suppress typeName if not set explicitly on DoEntity
diff --git a/org.eclipse.scout.rt.dataobject/src/main/java/org/eclipse/scout/rt/dataobject/DataObjectInventory.java b/org.eclipse.scout.rt.dataobject/src/main/java/org/eclipse/scout/rt/dataobject/DataObjectInventory.java
index 76b7809..77464c7 100644
--- a/org.eclipse.scout.rt.dataobject/src/main/java/org/eclipse/scout/rt/dataobject/DataObjectInventory.java
+++ b/org.eclipse.scout.rt.dataobject/src/main/java/org/eclipse/scout/rt/dataobject/DataObjectInventory.java
@@ -82,6 +82,14 @@
   }
 
   /**
+   * @return if specified class {@code clazz} has a type name. If the class does not have a type name, the super class
+   *         hierarchy is searched for the first available type name.
+   */
+  public boolean hasTypeName(Class<?> queryClazz) {
+    return toTypeName(queryClazz) != null;
+  }
+
+  /**
    * @return type name for specified class {@code clazz}. If the class does not have a type name, the super class
    *         hierarchy is searched for the first available type name. Returns {@code null} if no type name can be found.
    */
diff --git a/org.eclipse.scout.rt.jackson.test/src/test/java/org/eclipse/scout/rt/jackson/dataobject/JsonDataObjectsSerializationTest.java b/org.eclipse.scout.rt.jackson.test/src/test/java/org/eclipse/scout/rt/jackson/dataobject/JsonDataObjectsSerializationTest.java
index 7d1dc4d..46e9609 100644
--- a/org.eclipse.scout.rt.jackson.test/src/test/java/org/eclipse/scout/rt/jackson/dataobject/JsonDataObjectsSerializationTest.java
+++ b/org.eclipse.scout.rt.jackson.test/src/test/java/org/eclipse/scout/rt/jackson/dataobject/JsonDataObjectsSerializationTest.java
@@ -88,6 +88,7 @@
 import org.eclipse.scout.rt.jackson.dataobject.fixture.TestSubPojo;
 import org.eclipse.scout.rt.jackson.dataobject.fixture.TestThrowableDo;
 import org.eclipse.scout.rt.jackson.dataobject.fixture.TestVersionedDo;
+import org.eclipse.scout.rt.jackson.dataobject.fixture.TestWithoutTypeDo;
 import org.eclipse.scout.rt.jackson.testing.DataObjectSerializationTestHelper;
 import org.eclipse.scout.rt.platform.BEANS;
 import org.eclipse.scout.rt.platform.BeanMetaData;
@@ -2321,6 +2322,19 @@
     return testPoJo;
   }
 
+  @Test
+  public void testSerialize_TestWithoutTypeDo() throws Exception {
+    TestWithoutTypeDo testWithoutTypeDoNested = BEANS.get(TestWithoutTypeDo.class);
+    testWithoutTypeDoNested.withId("5678");
+    TestWithoutTypeDo testWithoutTypeDo = BEANS.get(TestWithoutTypeDo.class);
+    testWithoutTypeDo
+        .withId("1234")
+        .withNested(testWithoutTypeDoNested);
+
+    String json = s_dataObjectMapper.writeValueAsString(testWithoutTypeDo);
+    assertJsonEquals("TestWithoutTypeDo.json", json);
+  }
+
   protected TestItemDo createTestItemDo(String id, String attribute) {
     return BEANS.get(TestItemDo.class).withId(id).withStringAttribute(attribute);
   }
diff --git a/org.eclipse.scout.rt.jackson.test/src/test/java/org/eclipse/scout/rt/jackson/dataobject/fixture/TestWithoutTypeDo.java b/org.eclipse.scout.rt.jackson.test/src/test/java/org/eclipse/scout/rt/jackson/dataobject/fixture/TestWithoutTypeDo.java
new file mode 100644
index 0000000..effc7e4
--- /dev/null
+++ b/org.eclipse.scout.rt.jackson.test/src/test/java/org/eclipse/scout/rt/jackson/dataobject/fixture/TestWithoutTypeDo.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2020 BSI Business Systems Integration AG.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     BSI Business Systems Integration AG - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.scout.rt.jackson.dataobject.fixture;
+
+import javax.annotation.Generated;
+
+import org.eclipse.scout.rt.dataobject.DoEntity;
+import org.eclipse.scout.rt.dataobject.DoValue;
+
+public class TestWithoutTypeDo extends DoEntity {
+
+  public DoValue<String> id() {
+    return doValue("id");
+  }
+
+  public DoValue<TestWithoutTypeDo> nested() {
+    return doValue("nested");
+  }
+
+  /* **************************************************************************
+   * GENERATED CONVENIENCE METHODS
+   * *************************************************************************/
+
+  @Generated("DoConvenienceMethodsGenerator")
+  public TestWithoutTypeDo withId(String id) {
+    id().set(id);
+    return this;
+  }
+
+  @Generated("DoConvenienceMethodsGenerator")
+  public String getId() {
+    return id().get();
+  }
+
+  @Generated("DoConvenienceMethodsGenerator")
+  public TestWithoutTypeDo withNested(TestWithoutTypeDo nested) {
+    nested().set(nested);
+    return this;
+  }
+
+  @Generated("DoConvenienceMethodsGenerator")
+  public TestWithoutTypeDo getNested() {
+    return nested().get();
+  }
+}
diff --git a/org.eclipse.scout.rt.jackson.test/src/test/resources/org/eclipse/scout/rt/jackson/dataobject/TestWithoutTypeDo.json b/org.eclipse.scout.rt.jackson.test/src/test/resources/org/eclipse/scout/rt/jackson/dataobject/TestWithoutTypeDo.json
new file mode 100644
index 0000000..5fa56ad
--- /dev/null
+++ b/org.eclipse.scout.rt.jackson.test/src/test/resources/org/eclipse/scout/rt/jackson/dataobject/TestWithoutTypeDo.json
@@ -0,0 +1,6 @@
+{
+  "id" : "1234",
+  "nested" : {
+    "id" : "5678"
+  }
+}
diff --git a/org.eclipse.scout.rt.jackson/src/main/java/org/eclipse/scout/rt/jackson/dataobject/DataObjectAnnotationIntrospector.java b/org.eclipse.scout.rt.jackson/src/main/java/org/eclipse/scout/rt/jackson/dataobject/DataObjectAnnotationIntrospector.java
index d7275e1..616aa88 100644
--- a/org.eclipse.scout.rt.jackson/src/main/java/org/eclipse/scout/rt/jackson/dataobject/DataObjectAnnotationIntrospector.java
+++ b/org.eclipse.scout.rt.jackson/src/main/java/org/eclipse/scout/rt/jackson/dataobject/DataObjectAnnotationIntrospector.java
@@ -10,6 +10,8 @@
  */
 package org.eclipse.scout.rt.jackson.dataobject;
 
+import org.eclipse.scout.rt.dataobject.DataObjectInventory;
+import org.eclipse.scout.rt.dataobject.DoEntity;
 import org.eclipse.scout.rt.dataobject.IDoEntity;
 import org.eclipse.scout.rt.platform.BEANS;
 import org.eclipse.scout.rt.platform.Bean;
@@ -21,6 +23,7 @@
 import com.fasterxml.jackson.databind.introspect.AnnotatedClass;
 import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
 import com.fasterxml.jackson.databind.jsontype.TypeResolverBuilder;
+import com.fasterxml.jackson.databind.jsontype.impl.StdTypeResolverBuilder;
 
 /**
  * Jackson {@link AnnotationIntrospector} implementation adding type resolver for all {@link IDoEntity} data object
@@ -40,6 +43,9 @@
 
   @Override
   public TypeResolverBuilder<?> findTypeResolver(MapperConfig<?> config, AnnotatedClass ac, JavaType baseType) {
+    if (!(ac.getRawType() == DoEntity.class) && !(ac.getRawType() == IDoEntity.class) && !BEANS.get(DataObjectInventory.class).hasTypeName(ac.getRawType())) {
+      return StdTypeResolverBuilder.noTypeInfoBuilder();
+    }
     if (IDoEntity.class.isAssignableFrom(ac.getRawType())) {
       DataObjectTypeResolverBuilder doTypeResolverBuilder = BEANS.get(DataObjectTypeResolverBuilder.class);
       doTypeResolverBuilder.init(JsonTypeInfo.Id.NAME, BEANS.get(DataObjectTypeIdResolver.class));