小编典典

在WCF中jSON序列化.NET DataTable的最佳方法是什么?

json

当我将WCF配置为使用jSON序列化并将DataTable包含在我的一个DataContracts中时,它会先将DataTable序列化为XML,然后再将整个DataContract序列化为jSON。我希望将DataTable序列化为jSON,而不是XML。

我的问题是:

  1. 为什么首先将DataTable序列化为XML?
  2. 我如何才能将其序列化到jSON?

阅读 428

收藏
2020-07-27

共1个答案

小编典典

  1. DataTable是一个纯.NET构造,无法(无损)用JSON以无损方式表示。DataTables包含许多JSON无法存储的其他信息:主键,自动增量,允许空值,标题,数据类型,索引等。序列化到XML / Binary是.NET可以对DataTable进行本机序列化的唯一方法。然后将此XML序列化的DataTable序列化为JSON。

  2. 使用JSON.NETFastJSON将DataTable转换为DataTable的普通的,与JSON兼容的纯净版本,任何JSON客户端都可以使用它,而不仅仅是.NET WCF客户端。您将丢失上面(1)中提到的所有DataTable自定义属性,仅获得字段名称/值JSON对。由于每行中字段名称的重复,以这种方式进行的存储效率很低。

不要在DataContract中使用DataTable。如果您希望获得DataTable的好处,并且您的客户端始终是.NET,则可以通过Binary
Serialization将DataTable序列化为字节数组,然后选择压缩所得的序列化字节流。在您的DataContract中公开一个字节数组。这将为您提供客户端上DataTable的高效,完全无损的版本(在解压缩和二进制反序列化之后),而不是DataTable的淡化JSON版本(由(2)提供)…

2020-07-27