How do I use non-UnityObject derived objects with EditorGUILayout?

I’m trying to have the inspector present data from a custom class in the editor using a custom extension derived off Editor.

It looks like the standard way to do it is via EditorGUILayout.ObjectField(), but that requires that the object be based off UnityObject. I have been able to successfully expose custom data objects (not derived off UnityObject) to the default inspector by making them public and/or implementing the [Serializable] attribute, so I know it is somehow embedded in DrawDefaultInspector(). Is there some other API call I can make here?

I didn’t find an answer on the forums, but this may be related to Problem using EditorGUILayout.ObjectField with custom type - Unity Answers

If the class is public and [Serlialzable], use EditorGUI.PropertyField.