如何在序列化类时更改属性,类层次结构

时间:2015-03-03 06:45:02

标签: c# xml xml-serialization xmlserializer object-serialization

我的SDK(Geometry)中有一个基类,用于序列化其成员。有些成员只是简单的属性和像字符串这样的元素和其他元素是用户定义的类的数组。现在,我需要适应工作流程的变化,这会导致基类成为父类的子级,这意味着XML层次结构也会发生变化。而且,我也想重命名一些属性/元素。

但是,使用以前的SDK代码(类层次结构)序列化的XML又如何呢?如何将这些XML反序列化为新的SDK?

<Geometry Type"Test" IsAssessed="False">
    <Name>Sample Geometry</Name>
    <LengthA>69</LengthA>
    <LengthB>87</LengthB>
    <LengthC>50</LengthC>
        <Points>
            <Point X="1537308.5" Y="16030594.72" Z="1000">
                <IsTracked>false</IsTracked>
            </Point>
            <Point X="1537308.5" Y="16030594.72" Z="900">
                <IsTracked>false</IsTracked>
            </Point>
            <Point X="1536601.21" Y="16028954.3" Z="-5670.6">
                <IsTracked>false</IsTracked>
            </Point>
        </Points>
</Geometry>

所以,让我们说在更改之后,会引入一个名为Calculator的类,它有一个Geometry集合。但是我想重命名Geometry以及重命名它的一些元素/属性。并添加/删除属性。

如何解决这个问题,以便我之前的XML能够成功反序列化。

1 个答案:

答案 0 :(得分:0)

查看Version Tolerant Serialization

这允许您添加标记(OptionalField,OnDeserializing等)以考虑XML结构中的更改。

或者,如果它是一次性的,您可以反序列化到旧版本,然后实现转换代码以更新到新版本。如果这是经常发生的事情,这可能很难维持。

如果您可以选择更改,则某些序列化格式可以提供比XML更多的版本控制灵活性,例如Protocol Buffers