Преобразовать список<ExpandoObject> в список<KeyValuePair>
В настоящее время я работаю над приложением.NET Framework 4.7.2. Из ответа веб-службы мне нужно проанализировать данные JSON в List<KeyValuePair<int, Dictionary<string, object>>>
, Этот тип данных важен для дальнейшего выполнения программы, я не могу его изменить.
Данные JSON с динамическими свойствами выглядят так:
{ "data" : [
{"Id":1, Text:"Test1", coolProp: 213 },
{"Id":2, Text:"Test2"},
{"Id":3, Text:"Test3", otherProp: "cool" },
]}
Я попробовал следующую кодировку, но она не сработала:
JsonConvert.DeserializeObject<List<KeyValuePair<int, Dictionary<string, object>>>>(Convert.ToString(JObject.Parse(json)["data"]));
С другой стороны, я могу преобразовать JSON в ExpandoObject:
var expando = JsonConvert.DeserializeObject<List<ExpandoObject>>(Convert.ToString(JObject.Parse(json)["data"]));
Я думал о написании частного метода для преобразования ExpandoObject в мой List<KeyValuePair<int, Dictionary<string, object>>>
,
private KeyValuePair<float, List<KeyValuePair<int, Dictionary<string, object>>>> ConvertExpandoToKeyValue(float key, List<ExpandoObject> expando)
{
var result = new KeyValuePair<float, List<KeyValuePair<int, Dictionary<string, object>>>>();
// I don't really know how to convert the expando object to the desired data structure
// Moreover I need to put a float key in the structure: 52.2343
return result;
}
ExpandoObject выглядит так:
Конечный результат KeyValuePair<float, List<KeyValuePair<int, Dictionary<string, object>>>>
должно выглядеть так:
Знаете ли вы, как преобразовать ExpandoObject в нужный тип данных и добавить ключ в начале?
Или, может быть, вы знаете лучший способ преобразовать данные JSON в желаемую структуру данных?
Большое спасибо!!
1 ответ
Хорошо, я написал решение, я просто хотел поделиться с вами. Возможно, есть лучший способ, хотя:
private KeyValuePair<float, List<KeyValuePair<int, Dictionary<string, object>>>> ConvertExpandoToKeyValue(float key, List<ExpandoObject> expando)
{
var result = new KeyValuePair<float, List<KeyValuePair<int, Dictionary<string, object>>>>
(key, new List<KeyValuePair<int, Dictionary<string, object>>>());
for (int i = 0; i < expando.Count; i++)
{
var element = new Dictionary<string, object>(expando[i]);
var propertyValues = new KeyValuePair<int, Dictionary<string, object>>(i, element);
result.Value.Add(propertyValues);
}
return result;
}