Custom Editor change a complex type's property serialization on inspector

I make a reader for a class (Reader is mono-behaviour) and the reader can contain a list of a certain complex type. I managed to do it in a way I just manually made fields appropriately inside the reader to make it look like it serializes. However, what I really want is to make a custom property serialization for my types.

the property serialization is the EditorGUILayour.PropertyField();

My question is: How can I make this function work properly with custom types?

Edit:
I know I can just put the property there but then it will just regularly serialize whatever variables this class has normally, my intention is how can I make a completely custom way of serializing for a specific non-mono class

You simply need to follow the rules of Unity serialization:

Mark your class [Serialiable]

All public or SerializeField-marked fields in the class must themselves be serializable.

I am aware that to serialize a custom class you must put System.Serialize on it…

but as I said, I do not want the default serialization of simply serializing every variable as it is (if it’s even possible with lists and dictionaries containing complex types).

I am asking how can I change the behaviour of EditorGUILayour.PropertyField based on the type of the field in a custom way

For example, the way they made an array/list be serialized is a foldout with a size variable.
So can I make a special display for a custom type?