问题标签 [iextensibledataobject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
872 浏览

c# - XmlSerializer 等效于 IExtensibleDataObject

使用 DataContracts,您可以从 IExtensibleDataObject 派生以允许往返工作,而不会丢失 XML 文件中任何未知的附加数据。

我不能使用 DataContract,因为我需要控制输出 XML 的格式。但我还需要能够在旧版本的应用程序中读取未来版本的 XML 文件,而不会丢失 XML 文件中的任何数据。

例如

XML v1:

XML v2:

如果从我的应用程序的 v1 读取 XML v2 文件,再次反序列化和序列化它会将其转换为 XML v1 文件。即“年龄”字段被删除。

是否有任何类似于 IExtensibleDataObject 的东西可以与 XmlSerializer 一起使用以避免 Age 字段消失?

0 投票
3 回答
15323 浏览

c# - IExtensibleDataObject 在客户端的使用

我已将我的 Web 服务转换为具有一些数据合同的 wcf 服务。作为最佳实践,提到并建议 DataContracts 应该从 IExtensibleDataObject 继承。我的意思是,在添加或删除数据成员的情况下,IExtensibleDataObject 很有帮助。但我无法了解客户将如何访问已删除的数据成员。这是我的代码:

现在,在我的下一个 Web 服务版本中,我对 DataContract 进行了一些更改

但是,正在访问旧版本 Web 服务的客户端现在由于未提供 MiddleName 字段而出现错误。我仍然对 IExtensionDataObject 的使用感到困惑。

0 投票
1 回答
817 浏览

wcf - IExtensibleDataObject 实现向前和向后兼容性

  1. 我没有在服务器的 DC 中实现这个接口。

  2. 虽然我在客户端自动获得了 VS2008 生成的这个实现,但这很好。

  3. 现在我去编辑我的 Reference.cs 以包含一个新字段(区分特定服务方法的服务器 DC(输入参数))

  4. 编译,运行指向旧服务的代码,尽管我将新字段的值(示例布尔类型为 true)设置为忽略我的值,但它工作得很好。

  5. 那为什么要在服务器上实现 DC

  6. 我期待前向兼容性,它工作正常。

  7. 现在我删除了我在#3 中添加的代码。编译。

  8. 而是在服务器 DC 编译中添加了相同的字段。

  9. 现在我运行从客户端向服务器发送较少数据的代码 DC 有更多列。它工作正常。这意味着向后兼容性工作正常吗?

  10. 希望有些地方我的理解不正确?

我的环境是.Net 3.5 Sp1

0 投票
1 回答
772 浏览

c# - 更改 Json 或 ExtensionDataObject

我有一个无法更改的 Json 服务,因为它不是我的。他们的 Json 以一种难以解析的方式格式化。它看起来像这样。

我真的更希望它像 JSon 数组一样布局,但目前不是。我想知道这里最好的方法。我应该在解析它之前将 Json 更改为看起来像一个数组还是加载 ExtensionData 并从中解析它?

提要中还有其他我没有问题的项目。只是坚持这一节。

谢谢

0 投票
0 回答
296 浏览

c# - 可移植类库中的 DataContract 模型不可扩展?

我正在创建一个面向 .Net 4.5+、Silverlight 5+ 和 Windows 8+ 应用商店应用的便携式类库。该库包括模型对象,这些对象将被序列化和反序列化为文件,以便在实现应用程序之间传输。虽然可移植类库支持DataContractAttributeDataContractSerializer,但它们不支持IExtensibleDataObject- 推荐用于前向兼容数据协定(MSDN 文章)。

我几乎可以肯定模型对象会随着时间而改变。我能做些什么来保持序列化/反序列化DataContractSerializer至少不会失败,而且还能防止往返操作中的信息丢失?感谢您的任何建议!