当前位置: 首页 > 面试题库 >

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

宣滨海
2023-03-14
问题内容

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

我的问题是:

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

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

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

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



 类似资料:
  • 本文向大家介绍wcf WCF中的序列化,包括了wcf WCF中的序列化的使用技巧和注意事项,需要的朋友参考一下 示例 序列化是将对象转换为字节流以存储对象或将其传输到内存,数据库或文件的过程。Microsoft页面序列化 下面的示例演示了WCF中的序列化: [DataContract]属性与类一起使用。在这里,它装饰有Person阶级。 [OperationContract]用于方法。在这里用Ad

  • 问题内容: 我可以访问一组文件(每个文件约80-800mb)。不幸的是,每个文件中只有一行。该行仅包含一个JSON对象(列表列表)。加载并将其解析为较小的JSON对象的最佳方法是什么? 问题答案: 这是他们提出的解决方案:

  • 问题内容: 我目前在asp.net mvc网站上使用jqgrid,我们的网络(内部应用程序)运行缓慢,似乎需要花费很长时间才能加载网格(问题既涉及网络,也涉及解析,渲染) 我试图确定如何最小化我发送给客户端的内容,以使其尽可能快。 这是控制器将数据加载到网格中的操作的简化视图: 所以我正在建立一个json数据(我有大约200条以上的记录),然后将其发送回GUI以放入jqgrid。 我能想到的一件事

  • 我正在编写一个可序列化的类,它接受多个参数,包括一个函数: 存储在成员变量中,因此需要可序列化。如果分配给它们的类型是可序列化的,则Javalambda是可序列化的。如果使用lambda创建,那么确保在构造函数中传递的是可序列化的最佳方法是什么? > 创建一个可序列化函数,并使用该函数: 问题: 现在,

  • 问题内容: 我需要为某些对象实现JSON序列化,并且在与通用集合进行集成时遇到了一个问题。 所有可序列化的类都实现此接口(JSONObject来自此库): 我基于java.util.list的集合的代码大致如下所示: 我的问题是:当我从JSONObject加载AwesomeList时,我需要创建其元素,但是这是不可能的,因为Java禁止我写 我应该如何修改此任务的方法? 问题答案: 您是否绑定到该

  • 问题内容: 这个问题已经在这里有了答案 : 将巨大的(95Mb)JSON数组拆分成较小的块? (4个答案) 5天前关闭。 我可以访问一组文件(每个文件约80-800mb)。不幸的是,每个文件中只有一行。该行仅包含一个JSON对象(列表列表)。加载并将其解析为较小的JSON对象的最佳方法是什么? 问题答案: 已经有一个类似的帖子在这里。这是他们提出的解决方案: