Somewhere back around 1999-2000 or so, I made a library of code that we used in my company to share dynamically defined data from a client to server and from server to server. We also used it for storing all kinds of files like preference files, form layout files, etc. It turned out to be very handy and extremely robust so we used it for just about everything. After leaving the company, I still wanted some kind of dynamic data object modeling mechanism with built-in streaming for all my projects so I set out to build something new that served a similar purpose, but with the design goal to be just a bit faster and just a bit more compact when serialized. The first step was to research the internet to see what techniques others have used out there that I could borrow concepts from.
There are many different serialization technologies available to choose from that many different companies have created and made available. There's a huge list of them at: https://en.wikipedia.org/wiki/Comparison_of_data_serialization_formats. Even though most of them have a similar goal which is to serialize structured data from point A to point B (or to persist and retrieve from a store), each of the serialization techniques have certain aspects that make them more suited or less suited for certain situations. Some are more optimal for speed, some more optimal for compactness, and others are more optimal for human-readability, etc. So where does DataObjects sit in this spectrum?
In a nutshell, DataObjects is similar to JSON in that it can model an in-memory hierarchical structure of different types of data. Like JSON, it also supports arrays and collections of name-value pairs. However, unlike JSON, it explicitly models many more data types such as dates, GUIDs, and much more. Each value can be an atomic type of data or it can be a nested array or nested key-value collection. Like XML, it can model attributes on any data element. The streaming is designed to be fast, reasonably compact(but not using compression), be fully self described, have explicitly typed data, and to allow a dynamically structured model of data.