A quick analysis of the XML reveals that we are only interested in Notify element and everything under it. The rest is just the basic
SOAP envelope. We are mainly interested in the eventXml element, as
this is another encoded XML document explaining exactly what happened in
the build. The contents of that will be outside of the scope of this
post.

From this I was able to build my ServiceStack DTO. This took a lot of
tinkering with, and what you see below is the result of any hours trial
and error.

The class name must be Notify. ServiceStack does not pick up the
Name property of the DataContract attribute.

I was unable to get it to work without specifying the order of the
properties in the DataMember attribute.

The properties must match the element names, including case.
Alternatively, you can set the Name property of the DataMember
attribute in order to set this correctly and keep the proper
c# notation. This is what I have done.

Finally, the last bit that caused me issues was that I was post-ing my
request to the Uri defined in the Route attribute, namely /tfsevents/buildcomplete. This resulted in null properties on my DTO.
I finally realised that I should be posing to /soap12 instead. Once I
was posting to the correct location, it all started working.