在 C# 中使用对象的键对值从 JArray 编写 JObject



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

相关内容

  • 没有找到相关文章

最新更新