C# 从Json数组访问属性

C# 从Json数组访问属性,c#,arrays,json,linq,C#,Arrays,Json,Linq,我有以下数组: { "customizedData":[ { "key":"SubscriptionId", "value":"xxxxxxxxxxxxxxxx" }, { "key":"OfferId", "value":&

我有以下数组:

{
   "customizedData":[
      {
         "key":"SubscriptionId",
         "value":"xxxxxxxxxxxxxxxx"
      },
      {
         "key":"OfferId",
         "value":"xxxxxxxxxxxxxx"
      },
      {
         "key":"SubscriptionName",
         "value":"DYNAMICS 365 BUSINESS CENTRAL TEAM MEMBER"
      },
      {
         "key":"Quantity",
         "value":"6"
      },
      {
         "key":"Status",
         "value":"Suspended"
      },
      {
         "key":"PartnerOnRecord",
         "value":"None"
      }
   ]
}
如何访问关键元素:

“键”:“SubscriptionName”,
“值”:“DYNAMICS 365业务中心团队成员”

目前我使用:
(string)t[“customizedData”][2][“value”]


有更好的方法吗?

假设您使用的是Json.net,并且不想为其创建强类型,因此可以使用:


假设您使用的是Json.net,并且不想为其创建强类型,因此可以使用:

如果您使用的是nuget,那么这可以通过helper函数来完成。首次使用
var jo=JObject.Parse(jsonContent)
解析,并将其传递给helper函数
GetValueFromJson(jo,“SubscriptionName”,“customizedData”)
,使用此helper函数:

    private string GetValueFromJson(JObject jo, string key, string rootKey)
    {
        var value = jo[rootKey].Children()
                                        .Where(i => i["key"].ToString() == key)
                                        .Select(i => i["value"].ToString())
                                        .FirstOrDefault();
        return value;
    }
如果您使用的是nuget,那么这可以通过helper函数来完成。首次使用
var jo=JObject.Parse(jsonContent)
解析,并将其传递给helper函数
GetValueFromJson(jo,“SubscriptionName”,“customizedData”)
,使用此helper函数:

    private string GetValueFromJson(JObject jo, string key, string rootKey)
    {
        var value = jo[rootKey].Children()
                                        .Where(i => i["key"].ToString() == key)
                                        .Select(i => i["value"].ToString())
                                        .FirstOrDefault();
        return value;
    }

你能分享你到目前为止尝试过的东西吗?是C#,我猜对了吗?你使用什么库来处理json?是Json.NET吗?请添加标记。@AlexanderPetrov其标记的c#我假设是这样的?正在反序列化为一个强类型,如
public partial class KeyValueThing{[J(“customizedData”)]public List customizedData{get;set;}}public partial class CustomizedDatum{[J(“key”)]public string key{get;set;}[J(“value”)]公共字符串值{get;set;}
并简单地像
KeyValueThing.CustomizedData.FirstOrDefault(x=>x.Key==“MyKey”)那样进行筛选
available?你能分享你到目前为止尝试过的吗?是C#吗?我猜对了吗?你使用什么库来处理json?是json.NET吗?请添加标记。@AlexanderPetrov其标记的C#我想是这样的?正在反序列化为一个强类型,如
公共部分类KeyValueThing{[J(“customizedData”)]公共列表自定义数据{get;set;}}公共部分类自定义数据{[J(“key”)]公共字符串键{get;set;}[J(“value”)]公共字符串值{get;set;}
并简单地像
KeyValueThing.CustomizedData.FirstOrDefault(x=>x.key==“MyKey”)那样过滤
available?这还不错,但我认为最好将
JObject
作为第一个参数传入。否则,如果你想对同一个JSON对不同的键多次使用该方法,那么每次都会重新解析JSON。最好先解析一次,然后提取、提取、提取。你完全正确!这还不错,但我认为最好将
JObject
作为第一个参数传入。否则,如果您想对同一个JSON对不同的键多次使用该方法,则每次都会重新解析JSON。最好解析一次,然后提取、提取、提取。您完全正确!