Whilst writing a WinForm with a TreeView I came across ye olde problem of using components that don’t support Serialization. In my case I was shadowing the TreeNodes with my own Dictionary object, actually a generic myDictionary<string, myObject> only to discover that Dictionary doesn’t support Serialization either 

So faced with writing some custom serialization code I quickly reached for Google and found…
So now I had a serializable dictionary I just had to sort out my components. The first annoying problem was that my component contains a field of type TreeNode. So like a good .net developer I added the NonSerialable attribute to the field. But when I went to serialize the component it complained it couldn’t find out what a TreeNode was, grrr. So the mere fact of exposing a public property of TreeNode, even though the resulting serialization won’t use it, is enough to fail the XmlSerializer. I’ve not thought too much about a solution to this since I only use this class internally so I changed the property from Public to Internal and that did the trick…although what if I did need to expose that as a public method? So the code now happily writes my dictionary of objects to disk.