Hi Steve,
At this point, I don’t think there is a reliable silver bullet for upgrading serialized maps from v10 to v14.
One reason is simply the size of the change between those versions. Compared with the v9-to-v10 upgrade, where the API changes were relatively limited, v10 to v14 is a much bigger jump. We introduced major changes such as async support, embedded WPF, and .NET Core/.NET support, so there is no simple one-to-one mapping between the old and new APIs.
Another key issue is the serialization model itself. The current serializer is still based on the traditional [Serializable] approach, which depends on internal private fields. That makes it inherently fragile across versions, because those fields are implementation details and may change over time. So even if you were able to convert a v10 XML file into something that works in v14, it would still be difficult to make that solution reliable long term. More broadly, this style of serialization has been falling out of favor for exactly this reason.
We plan to move away from this traditional model and toward an explicitly defined contract-based approach. That will no longer depend on private fields, and it should make future versioning and compatibility much easier to manage.
For your current case, I would not recommend spending too much time trying to map old private fields to the current ones. It would likely be fragile and expensive to maintain. I think the more practical options are:
-
Define your own serialization contract and build your own save/load logic around it. This requires more work up front, but it gives you full control and a more stable path going forward.
-
Wait for the new contract-based serialization approach to mature further. This would reduce effort, but it depends on our timeline. At the moment, we are targeting v15.1, around November this year.
We already have some early work in this direction. If you’re interested, let me know, and I think we can share it with you to help you build your own serialization contract. By the way, are you on .net framework or .net 8+? I’m asking because the new serialization we are working is for .net 8+ only, at least for now.
Even after the new serialization approach is in place, there would still be some work needed to convert from v10 to that new format. However, that should be more of a one-time migration. Once the serialization contract is clearly defined and well maintained, this kind of issue should be much less likely to happen again in the future.
Best regards,
Ben