【发布时间】:2012-04-15 23:27:36
【问题描述】:
我有一个 Windows Phone 7 项目,它连接到 .NET Web 服务以按需获取数据。 WP7 项目和 Web 服务都使用同一个 c# 类库的副本。这个库的一部分是EmployeeType的枚举:
Public enum EmployeeType
{
Standard = 0,
TeamLeader = 105
}
自从应用发布以来,Web 服务类库对其进行了更改——添加了一个新的枚举值。 (SeniorManager = 110)
因此,当我在手机上收到一个具有包含新枚举值的属性的对象时,我会在尝试将其添加到 IsolatedStorage 时得到一个 SerializationException。这是因为新的枚举值无法序列化,因为 WP7 类库没有对其进行相同的更新,并且枚举值不存在。
我想要实现的是仍然能够序列化对象,但是忽略无效的枚举值,或者用一个有效的枚举值替换它(最好是@ 987654325@)。
这将使我能够处理对 Web 服务枚举的任何未来添加,而不会破坏应用程序的功能。
注意事项:
- 上面的枚举/值是为了问题的目的而设计的,而不是有问题的实际枚举。
- 值将被序列化为不正确的值这一事实对于应用程序而言并不重要。
谢谢!
【问题讨论】:
-
您是否尝试过构建自定义的 ISerializable 实现?
-
不,我没有(也从未使用过自定义的 ISerializable 实现)。这是一个具有许多属性的大型类,所以要实现很多工作吗?另外,类上有一个 [DataContract] 属性,属性上有 [DataMember] 属性(包括枚举类型的属性),所以不确定这是否会影响什么?
-
你不能更新到新版本的库吗?
-
@svick:是的,我可以,而且我会这样做!但是,Web 服务被多个客户端使用,而不仅仅是 WP7 项目。有时,需要对 Web 服务进行更新,我希望避免为此目的发布更新(并且 Web 服务团队希望能够在不等待 WP7 应用程序批准过程完成的情况下进行部署)。我知道这不是一个理想的情况,但我正在寻找任何有用的提示来解决这个问题,直到可以同步库。
-
这好像是 XMLSerialization,所以 ISerializable 在这里不适用。仅适用于二进制序列化。
标签: c# serialization