The open source folks at Google seem to be on a roll lately, pushing out some of the key pieces of the company's internal infrastructure as open source projects. The latest addition on this front is the prosaically-named Protocol Buffers. Depending on your application requirements and choice of language, Protocol Buffers may provide an efficient replacement for other data interchange formats such as XML.
Protocol Buffers has two main components: a wire format for data, and a set of language-specific preprocessors to create parsing code to handle that wire format. The key feature of the wire format is that it's terse and efficient to process. According to Google's own figures, the Protocol Buffers wire format is 3 to 20 times smaller than XML for equivalent data, and 20 to 100 times faster to work with. If you're passing around a lot of data - especially over relatively slow links - those savings can be significant.
In practice, the developer never needs to be concerned with the wire format. Instead, you define message types - essentially the equivalent of structs - with field names, data types, and annotations such as "required" or "optional." These message type definitions are fed through a special compiler that generates all the code you need in your application, including getters, setters, and serializers.
One nice feature of the code generated by Protocol Buffers is that they're both backward and forward compatible. If you have two servers using different versions of the same message, the old server can read newer versions (ignoring fields it doesn't understand), and the new server can read older versions. This makes upgrading networked software much easier.
The main current limitation of Protocol Buffers is in language support: the released version supports C++, Java, and Python. If the format catches on, though, we can expect to see people contributing compilers targeting other popular languages. In the meantime, if you're working in one of the supported languages, the project is worth checking out.