当我将WCF配置为使用jSON序列化并将DataTable包含在我的一个DataContracts中时,它会先将DataTable序列化为XML,然后再将整个DataContract序列化为jSON。我希望将DataTable序列化为jSON,而不是XML。
我的问题是:
DataTable是一个纯.NET构造,无法(无损)用JSON以无损方式表示。DataTables包含许多JSON无法存储的其他信息:主键,自动增量,允许空值,标题,数据类型,索引等。序列化到XML / Binary是.NET可以对DataTable进行本机序列化的唯一方法。然后将此XML序列化的DataTable序列化为JSON。
使用JSON.NET或FastJSON将DataTable转换为DataTable的普通的,与JSON兼容的纯净版本,任何JSON客户端都可以使用它,而不仅仅是.NET WCF客户端。您将丢失上面(1)中提到的所有DataTable自定义属性,仅获得字段名称/值JSON对。由于每行中字段名称的重复,以这种方式进行的存储效率很低。
不要在DataContract中使用DataTable。如果您希望获得DataTable的好处,并且您的客户端始终是.NET,则可以通过Binary Serialization将DataTable序列化为字节数组,然后选择压缩所得的序列化字节流。在您的DataContract中公开一个字节数组。这将为您提供客户端上DataTable的高效,完全无损的版本(在解压缩和二进制反序列化之后),而不是DataTable的淡化JSON版本(由(2)提供)…