Understanding C# Object Serialization and Object Graphs
Complex Terms in a Maturing Software Industry
I’m often struck by the overuse of complex terms to describe what are in fact simple concepts—persistence layer, web tier, servlet filters, etc. The term persistence layer basically refers to the area of code that interacts with some persistent storage—usually a relational database. The web tier is the section of software that provides web access. Servlet filters refer to the URLs processed by a web application/servlet.
Each such term is readily understood when it’s explained in a simple way. So why is the software industry permeated to such an extent with unnecessary complexity? Some clues to this need for obfuscation can perhaps be found if we look at other industries, such as the financial sector. I often listen to the analysts on Bloomberg.com, and after a few years I’ve begun to understand the secret language of "yields," "going long," "derivatives," and so on. It seems that as an industry matures, so does its appetite for jargon, and maybe this is happening in the software sector. It’s hard enough trying to understand the technology without having to first translate the descriptions! Excessive complexity in many ways is the enemy of widespread adoption. End of soapbox.
In this article, I describe the C# object serialization mechanism—this is the means by which you can store C# objects to stream-based storage. As you’ll see, C# object serialization is both powerful and flexible, while also being easy to understand. Let’s get down to some background on the area of serialization.