我需要转换为具有键“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对象的不同问题的副本。 我试图重新打开它,但没有成功。
答案 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" );
}
}