以下是破坏兼容性的示例。是否可以序列化为字符串并忽略较新版本的新枚举成员?
[JsonConverter(typeof(StringEnumConverter))]
public enum FooEnumV1
{
OldMember,
OldMember2,
}
[JsonConverter(typeof(StringEnumConverter))]
public enum FooEnumV2
{
OldMember,
OldMember2,
NewMember
}
public class SeatPropertiesTests
{
[Test]
public void AddNewDataMember()
{
var properties = new List<FooEnumV2>()
{
FooEnumV2.OldMember,
FooEnumV2.OldMember2,
FooEnumV2.NewMember
};
var serialized = JsonConvert.SerializeObject(properties);
var deserialized = JsonConvert.DeserializeObject<List<FooEnumV1>>(serialized);
Assert.NotNull(deserialized);
}
}
答案 0 :(得分:2)
可以使用自定义EnumConverter而不是使用默认的stringEnumConverter来完成。这是为解决类似要求而创建的自定义TolerantEnumConverter。
现在,您将使用自定义转换器声明属性的序列化属性。它根据有效值序列化枚举。因此,您的合同在反序列化方面不会中断。
[JsonConverter(typeof(TolerantEnumConverter))]
public enum FooEnumV1
{
OldMember,
OldMember2,
}
[JsonConverter(typeof(TolerantEnumConverter))]
public enum FooEnumV2
{
OldMember,
OldMember2,
NewMember
}