C#忽略WCF合同不匹配的向后兼容性?

时间:2018-05-21 09:35:09

标签: c# wcf

问题在于:

[DataContract]
public class StatusA : StatusBase {}
[DataContract]
public class StatusB : StatusBase {}

[DataContract]
[KnownType(typeof(StatusA))]
[KnownType(typeof(StatusB))]
public class StatusBase {}

如果我向最终用户提供此API - 一切都会好的,但稍后我会添加新状态:

[DataContract]
public class StatusC : StatusBase {}

[DataContract]
[KnownType(typeof(StatusA))]
[KnownType(typeof(StatusB))]
[KnownType(typeof(StatusC))]
public class StatusBase {}

然后如果最终用户在这个特定实例中发现 - 他将捕获合同不匹配异常,在这种特殊情况下,我希望被忽略,就像JSON一样,在反序列化不可知的东西时(只是尽可能地填充它)。例如,对于像这样的分页方法,它至关重要:

List<StatusBase> GetStatuses(int offset, int count);

所以,我的选择是将它包装成 byte [] ,然后手动反序列化(这会带来很多部分重复的类)或以某种方式告诉WCF调度程序尝试软反序列化此

我有什么选择?可以这样做吗?

1 个答案:

答案 0 :(得分:-1)

如何通过使用这个小技巧动态加载已知类型来完全避免选择性序列化的需要:

[KnownType("GetKnownTypes")]
public class StatusBase 
{
        private static Type[] GetKnownTypes()
        {
            var types = new List<Type>();

            //add all your types here using reflection.
            return types.ToArray();
        }
}
相关问题