diff --git a/feature_reflect_object.go b/feature_reflect_object.go
index 69458cd..1b59984 100644
--- a/feature_reflect_object.go
+++ b/feature_reflect_object.go
@@ -51,6 +51,10 @@ func encoderOfStruct(typ reflect.Type) (Encoder, error) {
 			if field.Type.Kind() == reflect.Map && typ.NumField() > 1 {
 				encoder = &optionalEncoder{encoder}
 			}
+			// one field pointer field will be inlined
+			if field.Type.Kind() == reflect.Ptr && typ.NumField() == 1 {
+				encoder = (encoder.(*optionalEncoder)).valueEncoder
+			}
 		}
 		for _, fieldName := range fieldNames {
 			structEncoder_.fields = append(structEncoder_.fields,
diff --git a/jsoniter_reflect_struct_test.go b/jsoniter_reflect_struct_test.go
index f28519b..ec14f68 100644
--- a/jsoniter_reflect_struct_test.go
+++ b/jsoniter_reflect_struct_test.go
@@ -200,3 +200,18 @@ func Test_recursive_struct(t *testing.T) {
 	err = UnmarshalFromString(str, &obj)
 	should.Nil(err)
 }
+
+func Test_one_field_struct(t *testing.T) {
+	should := require.New(t)
+	type AnotherObject struct {
+	}
+	type TestObject struct {
+		Me *AnotherObject
+	}
+	obj := TestObject{}
+	str, err := MarshalToString(obj)
+	should.Nil(err)
+	should.Equal(`{"Me":{}}`, str)
+	err = UnmarshalFromString(str, &obj)
+	should.Nil(err)
+}
\ No newline at end of file