Serialization of builtin components

I am trying to serialize unity’s builtin components (cameras, renderers etc) into a custom stream. The problem is that I can’t determine, through reflection, which fields are to be serialized. While for monoBehaviours it’s easy (serialize public plus [SerializeField] minus [NonSerialized]), this doesn’t seem to work for builtin components. Is there some way how to determine the field/property list, or do I need to write surrogates for each type?

Yes, you would need surrogates for each type. Built-in components don’t have their data on the managed side but on the native C++ side. The managed class is just a wrapper unlike your own MonoBehaviours.

As you might have noticed all built-in components have properties, not fields. All those property getter and setter are declared external. If you look at the serialized data (the YAML when force text serialization is enabled), you will see that the actual field names usually start with “m_XXXX”. Those are the C++ fields.