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。最好解析一次,然后提取、提取、提取。您完全正确!