如何从存储在数据库中的JSON字符串检索字段

时间:2018-07-27 23:23:10

标签: c# json linq

我有以下字符串

[{"id":"select","component":"select","editable":true,"index":2,
  "label":"WHAT IS THIS QUESTION?","description":"some description",
  "placeholder":"placeholder","options":["Aligator","Pikachi"],"required":false,
  "validation":".*","$$hashKey":"object:38"}] 

存储在数据库中。

我想检索validation值。如何使用LINQ实现此目的?我正在使用EF Core 2,但无法继续查询。

var jsonData = from table in myRepository.Table
               where table.JSONString.........

JSONString是存储JSONString的列的名称。

一段时间以来,我一直在SO和Google上搜索帖子,但尚未找到答案。谢谢。

更新:

我为JSON创建了如下的类

public class FormJson
{
    [JsonProperty(PropertyName = "id")]
    public string id { get; set; }

    [JsonProperty(PropertyName = "component")]
    public string component { get; set; }
    ...
}

但是我仍然不知道如何将这个特定的类映射到JSON对象并获取所需的字段。

1 个答案:

答案 0 :(得分:1)

下载NuGet软件包Newtonsoft.Json以包含using Newtonsoft.Json.Linq;

从数据库中获取JSON字符串:

var jsonStr = (from t in myRepository.Table select t.JSONString).FirstOrDefault();

将JSON字符串解析为JObject

JObject json = JObject.Parse(jsonStr);

读取要访问的特定令牌的值:

JToken validation = json.GetValue("validation");

执行以下操作:

string value = validation.ToString();
JToken[] valueArray = validation.ToArray();


编辑:

由于JObject.Parse()在使用JSON时出了点问题(有效),而不是使用JObject.Parse(),请尝试以下操作:

// Add references for TextReader and JsonReader
using Newtonsoft.Json;
using System.IO;

TextReader tReader = new StringReader(jsonStr);
JsonReader jReader = new JsonTextReader(tReader);
JObject json = JObject.Load(jReader);
JToken validation = json.GetValue("validation");