Вы можете проанализировать ответ в 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
}
Вы можете поместить приведенный выше код в l oop, если у вас есть несколько предметов. Затем вы можете преобразовать JObject
в словарь требуемого типа, используя ToObject<T>()
метод
var dict = jObject.ToObject<Dictionary<string, int>>();
Кроме того, имейте в виду, что ваш первоначальный ответ не соответствует типу Dictionary<string, int>
, потому что "key":"aaaa"
имеет значение string
, а не int
.
Другой и более общий способ c состоит в том, чтобы проанализировать 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);
}