【问题标题】:Get key value pair from JSON string without using json.net不使用 json.net 从 JSON 字符串获取键值对
【发布时间】:2019-02-25 08:59:51
【问题描述】:

我想从一个 json 字符串创建一个键值对:

string json = "[{\"Job\": \"Step\",\"Id\": \"D:\\\\file.CATPart\",\"Source\": \"V5\"},{\"Job\": \"Step\",\"Id\": \"D:\\\\file1.CATPart\",\"Source\": \"V5\"}]";

var jsonObj = new JavaScriptSerializer().Deserialize<List<Arguments>>(json);

foreach (var obj in jsonObj)
        {
            jobtype = obj.Job;
            SelectedId = obj.Id;
            source = obj.Source;    }

我目前正在反序列化为一个列表,但希望它是键值对以避免添加更多参数等问题。如果不使用 json.net 或任何其他外部 dll,我该如何做到这一点?

【问题讨论】:

  • 如果不想使用外部库,就得自己写。
  • 使用字典?
  • @MarcoDalZovo 是的
  • 我不明白您的问题,所以...您可以切换到字典并使用它来反序列化您的 Json 字符串。我知道了,还是您需要实现其他目标?
  • 其实你需要一个字典列表,因为Json是一个数组

标签: c# json key-value javascriptserializer


【解决方案1】:

正如@marsze 所说,您必须编写自己的deserializer。 您可以使用List&lt;Dictionary&lt;string, object&gt;&gt; 来存储您的参数。

【讨论】:

    【解决方案2】:

    一个不好的解决方案是手动处理字符串,通过迭代行,然后使用 string.split(':')。然后,您可以使用正则表达式清除所有非字母和数字,并将其插入您选择的枚举中。记住要小心处理嵌套和数组,(疯狂地进行单元测试)。

    将是资源密集型的,但它会完成这项工作。并且需要两周的开发时间来正确实施和测试。

    或者您可以从 GitHub 存储库复制代码,这些代码已经有一些很好的解决方案来处理这个问题。可以反编译 Newtonsoft 吗?

    【讨论】:

      猜你喜欢
      • 2019-04-11
      • 1970-01-01
      • 2017-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多