【问题标题】:C# Partial deserialization and full serializationC#部分反序列化和完全序列化
【发布时间】:2017-06-27 17:37:52
【问题描述】:

我在 C# 中有一个 json 文件。这是70mb的数据。我想用 JSON.net 将它读入 Windows 窗体应用程序,编辑一些数据并将其保存回来。 我的问题是我不想为这个 JSON 文件创建所有的数据结构,但我确实想创建其中的一些。当我重新序列化文件时,我希望从我创建的数据结构中进行所有更改,而不会丢失我没有创建的结构的数据。知道这是否可能吗?我希望我的问题很清楚。

【问题讨论】:

  • 这个东西绝对必须是 JSON 而不是数据库吗?对于“我如何痛苦地将 A 拼凑成一个脆弱的突变体模仿 B 擅长的东西”形式的任何问题,答案几乎总是“如果你想要 B,你知道在哪里可以找到它”。
  • 你试过什么?我确信在从源中获取数据之前对数据进行一些过滤是可能的。但如果不知道自己实际做了什么,就很难说。
  • 您可以完全控制序列化过程,所以这当然是可能的。如有必要,实现 ISerializable,存储对文件的引用,并在需要序列化时加载文件,进行更改,然后将它们直接保存到文件或返回其内容。实现起来很困难——概念很简单。

标签: c# json


【解决方案1】:

我建议您使用与 Json 等效的 XPath。使用 Json.NET,您可以parse 字符串并创建一个动态对象。

使用SelectToken,您可以查询值,或使用Linq

对于示例,我将假设一个包含序列化对象的 json 字符串。

var o = Newtonsoft.Json.Linq.JObject.Parse(jsonString);
o.SelectToken("TheNodeToChange").Replace("TheNewValue");
var updatedJsonString = JsonConvert.SerializeObject(o);

这将反序列化整个对象,您确实需要知道要更改的节点。但您不必实现完整的对象模型。

【讨论】:

  • 这是我的帖子背后的想法,但不知道你可以解析成这样的 var,谢谢你教我一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 2013-10-12
相关资源
最近更新 更多