Without changing the whole serializer, you could return a custom object that is mapped with the CLR Version class.
Version numbers shouldn't change too often. I would recommend putting a comment on it so that your future self do not refactor it away.
If you are using the DataContractSerializer, try this:
config.Formatters.XmlFormatter.SetSerializer(myType, new DataContractSerializer(myType, new DataContractSerializerSettings() { SerializeReadOnlyTypes = true });
Otherwise, make sure JSON.NET is up to date. It shouldn't have any difficulties serializing Read-Only properties.
I've tested with JSON.NET and it seems to pickup the fields that are named like your output and avoid the public properties altogether.
As a temporary solution, I would duplicate the object and return it so to better control serialization.