В версии 1 моего продукта у меня есть DataMember, который выглядит следующим образом:
[DataMember]
private Dictionary< EnumType1, Class1> Class1Dictionary;
Где EnumType1 определяется как:
[Flags]
public enum EnumType1
{
EnumMember1 = 1;
EnumMember2 = 2;
EnumMember3 = 4;
}
Сообщение SOAP выглядит так (перефразирую):
<Class1Dictionary>
<KeyValueOfEnumType1Class1UTLV0zE5>
<Key>EnumMember1 </Key>
<Value> ... </Value>
</KeyValueOfEnumType1Class1UTLV0zE5>
</Class1Dictionary>
В версии 2 я хочу изменить Class1Dictionary на Dictionary<string, Class1>
, а не Dictionary<EnumType1, Class1>
, но я хочу сохранить совместимость уровня обслуживания с предыдущей версией. Конечно, сервер / клиент версии v2 будет знать, как обращаться с конкретными значениями для Key, которые соответствуют значениям перечисления, о которых он знает. Для всех остальных исключений - ожидаемое поведение.
Моей первой идеей было просто изменить Class1Dictionary:
[DataMember]
private Dictionary< string, Class1> Class1Dictionary;
но это приведет к искажению сообщения SOAP, например, при изменении KeyValueOfEnumType1Class1UTLV0zE5 на другое значение. Итак, вопрос в том, как я могу аннотировать этот DataMember или использовать любую другую функцию WCF, чтобы сохранить мой словарь в коде v2, но использовать DataContract, совместимый с DataContract версии 1?