TreeView , like almost all other visual components in WinForms, is wrappers on top of native WinAPI elements.
Almost all native elements in WinAPI are windows. Those. any button is a window.
TreeView , in particular, is a window with a window class WC_TREEVIEW . Any actions with it are not a direct change of some state of control, but indirect, implemented through sending messages to this window. For example, Expand, this is a call of the form
UnsafeNativeMethods.SendMessage(new HandleRef(tv, tv.Handle), NativeMethods.TVM_EXPAND, NativeMethods.TVE_EXPAND, Handle);
The state itself is not available in the form of managed objects, and if it is available (in the form of Nodes ), the WinForms developers store it first of all in order to ensure the translation of calls from your code to WinApi.
Accordingly, about the convenience of serialization, they did not bother.
You should clearly separate the data from the view, and use data binding to synchronize changes.
Unfortunately, WinForms is bad enough with hierarchical data binding, so most likely you will have to add your binder . It may be easier to write a stupid serialization of the manual serialization of the Nodes collection.