-2

我的json:

"CustomData": [
  {
    "Key": "RegistrationWrx",
    "Value": "Wrx45687",
    "Id": 462,
  },
  {
    "Key": "IsConsentGiven",
    "Value": "True",
    "Id": 463,
  },

我用它来获取一些值:

string fetchResult = JsonConvert.SerializeObject(sidebar, Formatting.Indented);
JObject rss = JObject.Parse(fetchResult);

ConsentGiven = rss["RegistrationCase"]["CustomData"][1]["Value"].Value<string>(),

但我想检查“键”,例如“自定义数据”并显示“值”。我想我需要做类似的事情:

ConsentGiven = rss["RegistrationCase"]["CustomData"].Where(["Key"]=="IsConstantGiven")["Value"].Value<string>(),
4

2 回答 2

2

你的问题被扣了几个分,因为它有点模糊。

但是,我想我明白你需要什么......

我发现最容易解析 json 内容的方法是先转换它。

所以创建和类匹配你传入的json:

public class CustomData{
    public string Key {get;set;}
    public string Value {get;set}
    public int? ID {get;set;}
}

然后,无论您使用什么方法来读取 json,实例化该类型的对象并对其进行转换。

public CustomData ConvertCustomDataJson(string jsonString)
{
List<CustomData> customData = JsonConvert.DeserializeObject<List<CustomData>>(jsonString);
}

然后你可以使用你的对象轻松地循环它们,存储它们随意使用它们。

我很快就解决了这个问题,所以它可能并不完美。

Linq 查询以查找值

bool value = Convert.ToBool(customData.FirstOrDefault(x=> x.Key == "IsConsentGiven").Value);

此外,您还需要参考 NewtonSoft json 库。这是 VS 2012 中的一个 nuget 包

马丁

编辑:这是我的意思的完整版本,您可以使用索引找到不同的条目,但是,这可能只是我,我很紧张,因为我不知道 json 内容是否会改变。

序列化对象意味着它应该处理大多数更改 json 或附加数据,加上强类型的好处只是让它更容易阅读。

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LinqFun
{
    class Program
    {
        static void Main(string[] args)
        {
            //Set Data
            string jsonString = @"[
                                      {
                                        ""Key"": ""RegistrationWrx"",
                                        ""Value"": ""Wrx45687"",
                                        ""Id"": 462,
                                      },
                                      {
                                        ""Key"": ""IsConsentGiven"",
                                        ""Value"": ""True"",
                                        ""Id"": 463,
                                      }
                                   ]";

            //Create a list of CustomData entries to look through.
            List<CustomData> customData = JsonConvert.DeserializeObject<List<CustomData>>(jsonString);


            //Create an object for the is consent given block of data

            CustomData IsConsentGiven = customData.FirstOrDefault(x => x.Key == "IsConsentGiven");

            //check the linq query resulted in an object
            if (IsConsentGiven != null)
            {
                Console.WriteLine(IsConsentGiven.Value);
            }

            Console.ReadLine();
        }
    }

     public class CustomData{
         public string Key { get; set; }
        public string Value { get; set; }
        public int? ID { get; set; }
    }
}

您可以直接提取 IsConsentGiven 的值,但如果您必须将它包含在 try 块中以防数据丢失,我更喜欢自己检查它。直接将其拉出的 linq 将是:

bool value = Convert.ToBoolean(customData.FirstOrDefault(x => x.Key == "IsConsentGiven").Value);
于 2013-07-26T09:10:50.853 回答
0

希望这会有所帮助,创建一个具有 value 属性的类,然后执行以下操作

  public class Category
{

   public string Value{ get; set; }

 }

 var categories = JsonConvert.DeserializeObject<List<Category>>(json)
于 2013-07-26T09:12:16.017 回答