More robust message parsing

This replaces the usage of attributes from the System.Xml.Serialization namespace, as discussed in #3.
It should be the `Unknown` case but it's not working as I expected and unhandled exceptions can also be thrown.

This is a design mistake on my part, as you can tell...