我有一个JArray
,如下所示:
[
{
"key": "S8710 Server",
"value": "M"
},
{
"key": "Java",
"value": "M"
}
]
这个JArray
需要通过取键和值转换为JObject
,这样输出对象看起来像这样:
{
"S8710 Server": "M",
"Java": "M"
}
这种转换可能吗?如有任何帮助,我们将不胜感激。我尝试的是从DataTable
中提取键和值,并序列化结果。然后我尝试了JObject.Parse
。
var skillList = from skill in ds.Tables[4].AsEnumerable()
where skill.Field<Int64>("ResumeID") == applicantValue.ResumeID
select new clsResume.ExtractRatingInfo
{
key = skill.Field<string>("Skill"),
value = skill.Field<string>("SkillRating")
};
string skillResult = JsonConvert.SerializeObject(skillList, Newtonsoft.Json.Formatting.None);
JObject obj = JObject.Parse(skillResult);
是的,您可以这样转换JSON:
JObject result = new JObject(
jArray.Select(jt => new JProperty((string)jt["key"], jt["value"]))
);
Fiddle:https://dotnetfiddle.net/CcLj3D
注意:数组中所有对象的键必须不同,这样才能正常工作。
通过将内容字符串传递到JArray的静态方法Parse来创建JToken。从JToken获取内部子级,然后查找属性及其值。
像这样:
JArray jArray = JArray.Parse(YOUR_CONTENT_GOES_HERE);
foreach (var token in jArray.Children<JToken>())
{
var firstProp = token.Children<JProperty>().First(param => param.Name == "S8710 Server");
var firstValue = firstProp.Value<string>();
var secondProp = token.Children<JProperty>().First(param => param.Name == "Java");
var secondValue = firstProp.Value<string>();
}