使用C#中对象的密钥对值从JArray编写一个JObject

时间:2016-05-03 05:28:35

标签: c# .net json json.net

我有一个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);

2 个答案:

答案 0 :(得分:0)

通过将内容字符串传递给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>();

        }

答案 1 :(得分:0)

是的,您可以像这样转换您的JSON:

JObject result = new JObject(
    jArray.Select(jt => new JProperty((string)jt["key"], jt["value"]))
);

小提琴:https://dotnetfiddle.net/CcLj3D

注意:对于数组中的所有对象,键必须是不同的,才能使其正常工作。