将具有指定属性的JSON数组转换为Dictionary

时间:2016-08-21 09:31:50

标签: c# arrays json dictionary

我需要转换为具有键“id”和值“score”属性的对象的字典JSON数组,如下所示

[{"score":0.6990418,"id":"4833909335"},
{"score":0.8079009,"id":"4833874639"},
{"score":0.8079009,"id":"4834247506"}].

字典键应具有“id”属性值,字典值应从“score”复制。

请注意,它不是反序列化,而是在未将某些信息复制到目标对象时进行转换/映射(例如,属性名称和可能的其他属性)

我发现了类似的问题How to deserialize the json array of objects to dictionary,它被错误地关闭为关于使用多个属性反序列化不同JSON对象的不同问题的副本。 我试图重新打开它,但没有成功。

1 个答案:

答案 0 :(得分:0)

我已经创建了扩展方法,允许从JSON数组元素中提取属性对

  public static Dictionary< string, string> JsonArrayToDictionary( string strJson, string keyName,string valueName)
        {
            var array = JArray.Parse(strJson) ;
            var dictionary = JsonArrayToDictionary(array, keyName, valueName);
            return dictionary;
        }

        public static Dictionary<string , string > JsonArrayToDictionary(this JArray array, string keyName, string valueName)
        {
            if (array != null)
            {
                var dict = array.ToDictionary(x => x[keyName].ToString(), x => x[valueName].ToString());
                return dict;
            }
            return null;
        }


 [TestClass()]
    public class JsonHelperExtensionsTests
    {
        [ TestMethod()]
        public void JsonArrayToDictionaryTest()
        {
            var jsonArray= @"[{""score "":0.6990418,"" id"": ""ID1"" },{""score "":0.8079009,"" id"": ""ID2"" }]";
           var dict= JsonHelperExtensions.JsonArrayToDictionary(jsonArray, "id" , "score");
            dict.Count.Should().Be(2);
            dict[ "ID1"].Should().Be("0.6990418" );
        }
    }