在运行时设置DataContract的DataMember属性?

时间:2009-04-03 11:23:41

标签: .net attributes

是否可以在运行时动态设置datacontract的datamember属性?基本上我需要的是在序列化时读取包含两个属性上的DataMemeber属性的类的序列化实例,但是当前的“版本”不再具有它们但我需要迁移这些属性中的旧数据集我需要的是让datacontract反序列化器读取包含这些“旧”值的数据,并使用新配置重新序列化它们(因为这些属性的数据现在已经存储和处理了)完全不同)。

这可能吗?

干杯&谢谢。 -Jörg

1 个答案:

答案 0 :(得分:0)

您可以指定类型/已知类型 - 但不能指定AFAIK成员信息。 XmlSerializer在这里有点宽容......旧类型是否有可能使用xml属性? (而不是数据合同属性)。

另一种选择是提供IDataContractSurrogate - 但这并非易事。

你有没有机会用旧的属性来装饰你所使用的新机制的属性(等)吗?

如果数据很简单(即只有一种或两种类型,简单关系),您可以使用 parallel 类来反序列化,然后复制数据(property-to-property)等)进入新的数据结构,并重新序列化。随着模型复杂性的增加,这变得越来越困难。