我想将key
字段的名称改为键的值,并将value
字段的值替换为key
字段的值。
这是我的班级
public class SearchResponse
{
public Dictionary<string, int> Dictionary { get; set; }
}
响应是这样的:
{
"key":"aaaa",
"value":123
}
但我希望得到这样的回应
{
"aaaa":123
}
有什么办法吗?
发布于 2020-02-22 11:09:01
您可以将响应解析为JObject
,然后使用现有令牌中的值添加新令牌并移除旧令牌
var json = "{\"key\":\"aaaa\",\"value\":123}";
var jObject = JObject.Parse(json);
jObject[jObject["key"]?.ToString() ?? string.Empty] = jObject["value"];
jObject.Remove("key");
jObject.Remove("value");
Console.WriteLine(jObject);
输出将如下所示
{
"aaaa": 123
}
如果你有多个项目,你可以把上面的代码放到循环中。然后,可以使用ToObject<T>()
方法将JObject
转换为所需类型的字典
var dict = jObject.ToObject<Dictionary<string, int>>();
另外,请记住,初始响应与Dictionary<string, int>
类型不匹配,因为"key":"aaaa"
有一个string
值,而不是int
。
另一种更通用的方法是将json解析为Dictionary<string,string>
,然后将每对值作为键和值添加到新的Dictionary<string, int>
中。
var json = "{\"key\":\"aaaa\",\"value\":123}";
var dict = JObject.Parse(json).ToObject<Dictionary<string, string>>();
var result = new Dictionary<string, int>();
for (int i = 0; i < dict.Count; i += 2)
{
var first = dict.ElementAt(i);
var second = dict.ElementAt(i + 1);
result.Add(first.Value, int.TryParse(second.Value, out int parsedValue) ? parsedValue : 0);
}
发布于 2020-02-22 12:27:24
你可以拥有这样的东西:
public Dictionary<string, string> ModelToDict<T>(T item)
{
Type myObjectType = item.GetType();
Dictionary<string, string> dict = new Dictionary<string, string>();
PropertyInfo[] properties = myObjectType.GetProperties();
foreach (var info in properties)
{
string value = (string)info.GetValue(item);
dict.Add(info.Name, value);//change the order if you like
}
return dict;
}
https://stackoverflow.com/questions/60351541
复制