8

我创建了一个 API 包装类库,用于使用来自第 3 方的 rest API。

直到他们最近在他们的产品的最新版本中更新了 API 并向根元素添加了一个命名空间,这一切都在工作,现在我的反序列化代码失败了。

我的一门课的一个例子:

[Serializable]
[XmlRootAttribute(ElementName = "exit_survey_list")]
public class SupportExitSurveyCollection : ApiResult { .... }

如果我将 XmlRootAttribute 中的 Namespace 属性设置为返回的新命名空间,那么它会再次正常工作。

但我需要支持 API 的两个版本(命名空间和非命名空间),因为我无法确定哪个版本的 API 可用。

我想在不为不同版本复制类的情况下让它工作,但不确定是否可能。

感谢您的任何意见/建议。

4

1 回答 1

2

我不认为这是可能的。

您可以实现IXmlSerializable接口,并自己控制序列化 - 这会起作用,但可能不是您想要的,因为它需要您自己在代码中进行大量映射。

另一种选择是预处理消息并在缺少名称空间时添加名称空间。然后你可以有一个单一的反序列化过程。

于 2011-02-11T17:54:08.113 回答