The World serialization outputs the body userData with no issues that I have found.
Reading it in has been a bit of a problem. Right or wrong, here is what I did.
The object that I save in the body.userdata has a key that uniquely identifies this object. Since this object is my custom class and is not part of the Farseer assembly, ReadSimpleType can not resolve custom class. So I modified
ReadSimpleType in the serialization class to raise an event and I deserialize it in my game code and store it in a Dictionary using the object’s Key. ReadSimpleType returns the Key so what ever is calling it can save this
key in the usserdata.
Once the world has been deserialized, I just iterate through the body list and swap out the keys for the real object from the Dictionary.
Also, I found that deserialization was a bit slow on the phone. I converted that aspect to use Linq. Was planning to share at some point.