【问题标题】:How to perform serialization and deserialization of datatables to and from JSON如何执行数据表与 JSON 之间的序列化和反序列化
【发布时间】:2012-10-31 18:54:36
【问题描述】:

我正在尝试找到一种方法,将具有一个数据表的数据集序列化和反序列化为 JSON,并使用 JSON.NET 从 JSON 返回数据集/数据表,但是我发现的所有示例和示例都只是从一个数据集或数据表到 JSON,绝不是两种方式。我们有一个系统来处理 XML 序列化数据集和数据表,我们仍需要以该格式保留这些数据集,但允许某些 UI 视图将数据呈现为 JSON。

数据可以有空值,这是有效的。

任何帮助将不胜感激。

示例(单向序列化):
http://www.west-wind.com/weblog/posts/2008/Sep/03/DataTable-JSON-Serialization-in-JSONNET-and-JavaScriptSerializer

【问题讨论】:

  • This post 表示最新的 JSON.NET 库具有您需要的功能。
  • 非常感谢大家,我不知道JSON.NET的新版本会允许DataTable转换。我只需要创建一个自定义版本的 Newtonsoft.Json.Converters.DataTableConverter,它允许特定的复杂类型作为列数据类型。

标签: c# serialization json.net


【解决方案1】:

以下链接指向 Newtonsoft.Json.Converters.DataTableConverter.cs 的源代码,它可以满足您的需求,它非常简单,似乎是最好的路线。

https://github.com/JamesNK/Newtonsoft.Json/blob/master/Src/Newtonsoft.Json/Converters/DataTableConverter.cs

【讨论】:

  • @Chris 我更新了链接。如果您真的想深入了解,所有 Newtonsoft.Json 源代码都在 Github 上。
【解决方案2】:

这一切都取决于您希望如何管理反序列化。就个人而言,我喜欢使用基于 LINQ 的方法,它的工作方式如下:

// Get the children of the JSON result (This example is from my own code,
// in which case I have one big "result" node which contains a bunch of
// children that I am interested in deserializing.
var jsonChildren = JObject.Parse(response)["results"].Children();

// Now use a LINQ statement to deserialize. For example...
var jsonResults = jsonChildren.Select(x =>
{
    new MyObject
    {
        Prop1 = x["Var1"],
        Prop2 = x["Var2"],
    }
});

归根结底,您可以像使用键值对数组一样使用 JSON 子 IEnumerable,使用方括号语法访问必要的后代。 LINQ 只是让事情变得更简洁。

更新

不确定这是否适用于您的情况,但这里有一篇关于使用动态对象的有趣文章http://www.west-wind.com/weblog/posts/2012/Aug/30/Using-JSONNET-for-dynamic-JSON-parsing

【讨论】:

    猜你喜欢
    • 2014-07-12
    • 2013-02-09
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    相关资源
    最近更新 更多