Try using ISerializationSurrogate:
sealed class Vector2SerializationSurrogate : ISerializationSurrogate
{
public void GetObjectData(Object obj, SerializationInfo info, StreamingContext context)
{
var vec = (Vector2)obj;
info.AddValue(“x”, vec.X);
info.AddValue(“y”, vec.Y);
}
public Object SetObjectData(Object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector)
{
var vec = (Vector2)obj;
vec.X = info.GetSingle("x");
vec.Y = info.GetSingle("y");
return vec;
}
}