我创建了一个API包装类库,用于使用来自第三方的rest API。
直到他们最近在他们产品的最新版本中更新了API并在根元素中添加了一个命名空间,现在我的反序列化代码失败了。
我的一个班级的一个例子:
[Serializable]
[XmlRootAttribute(ElementName = "exit_survey_list")]
public class SupportExitSurveyCollection : ApiResult { .... }
如果我将XmlRootAttribute中的Namespace属性设置为返回的新命名空间,那么它将再次正常工作。
但是我需要支持两个版本的API(命名空间而不是命名空间),因为我无法确定哪个版本的API可用。
我想让这个工作没有重复不同版本的类,但不确定是否可能。
感谢您的任何意见和建议。
答案 0 :(得分:1)
我认为这是不可能的。
你可以实现IXmlSerializable接口,并自己控制序列化 - 这可能有用,但它可能不是你想要的,因为它需要你自己在代码中做很多映射。
另一个选择是预处理消息并添加命名空间(如果缺少)。然后,您可以进行单个反序列化过程。