将具有指定属性的JSON对象数组转换为Dictionary
本文关键字:数组 对象 转换 Dictionary JSON 属性 | 更新日期: 2023-09-27 18:03:28
我需要转换为字典JSON数组的对象与键"id"和值"score"属性,如以下
[{"score":0.6990418,"id":"4833909335"},
{"score":0.8079009,"id":"4833874639"},
{"score":0.8079009,"id":"4834247506"}].
字典键值应该有"id"属性值,并且字典值应该从"score"复制。
注意,它不是反序列化,而是当一些信息没有复制到目标对象时的转换/映射(例如:属性和其他潜在属性的名称)
我发现了类似的问题如何将对象的json数组反序列化到字典,这被错误地关闭为关于反序列化具有多个属性的不同json对象的不同问题的副本。我试着重新打开它,但是没有成功。
我已经创建了扩展方法来允许从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" );
}
}
当前时间的当前解决方案:
var jsArray = JObject.Parse(response);
var arrayDictionary = JsonConvert.DeserializeObject<Dictionary<string, dynamic>[]>(jsArray.ToString());