Dictionary<,>You can mark a dictionary directly for serialization. SaintsField will internally use SaintsDictionary to serialize it.
// Note the `partial`! public partial class SerDictionaryExample : MonoBehaviour { [Serializable] public struct Sub { public string subString; public int subInt; } // normal serializable [SaintsSerialized] public Dictionary<int, Sub> dictIntToStruct; // interface is also supported, just like SaintsDictionary [SaintsSerialized] private Dictionary<int, IInterface1> _dictInterface; // can be nested inside array/list, just like a normal serializable type [SaintsSerialized] private Dictionary<IInterface1, int>[] _dictInterfaceArr; [SaintsSerialized] private List<Dictionary<IInterface1, IInterface1>> _dictInterfaceLis; }

Because it uses SaintsDictionary internally, if you want to receive the field value for OnValueChanged, you need to use IDictionary<,> or SaintsDictionary<,> as callback parameter.
[SaintsSerialized, OnValueChanged(nameof(ChangedWatcher))] private Dictionary<string, int> _myDictionary; // Either `IDictionary` or `SaintsDictionary` type private void ChangedWatcher(IDictionary<string, int> dic) => Debug.Log(dic);