Member 14779968 Ответов: 3

Как я могу привести словарь<string, object> В keyvaluepair<string, object>


У меня есть метод десериализации моего json в словарь<string,object>, Но у меня возникают проблемы, когда мой json является объектом, чтобы превратить его в словарь<string, object>.

Я получаю ошибку во втором цикле foreach
Ошибка: не удается неявно преобразовать тип System.коллекции.универсальный.словарь в<строка, Объект="">, Чтобы система'.коллекции.универсальный.keyvaluepair в<строка, объект=""&ГТ;

//Вот этот метод

public static Dictionary<string, object> DeserializeToDictionary(string jsonString, bool isArray = false)
       {
           if (!isArray)
               isArray = jsonString.Substring(0, 1) == "[";

           if (!isArray)
           {
               var responseJson = JsonConvert.DeserializeObject<Dictionary<string, object>>(jsonString);
               var copyOfResponseJson = new Dictionary<string, object>();
               foreach (KeyValuePair<string, object> myDictionary in responseJson)
               {
                   if (myDictionary.Value is JObject)
                       copyOfResponseJson.Add(myDictionary.Key, DeserializeToDictionary(myDictionary.Value.ToString()));
                   else if (myDictionary.Value is JArray)
                       copyOfResponseJson.Add(myDictionary.Key, DeserializeToDictionary(myDictionary.Value.ToString(), true));
                   else
                       copyOfResponseJson.Add(myDictionary.Key, myDictionary.Value);
               }
               return copyOfResponseJson;
           }
           else
           {
              var resposneJson1 = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(jsonString);
               var copyOfResponseJson2 = new Dictionary<string, object>();
               foreach(KeyValuePair<string, object> myDictionary in resposneJson1)
               {
                   if (myDictionary.Value is JObject)
                       copyOfResponseJson2.Add(myDictionary.Key, DeserializeToDictionary(myDictionary.Value.ToString()));
                   else if (myDictionary.Value is JArray)
                       copyOfResponseJson2.Add(myDictionary.Key, DeserializeToDictionary(myDictionary.Value.ToString(), true));
                   else
                       copyOfResponseJson2.Add(myDictionary.Key, myDictionary.Value);
               }
               return copyOfResponseJson2;

           }



//Обновление вопроса с помощью одного из Json я пытаюсь десериализовать
{
	"groups": null,
	"data": [{
			"type": 123,
			"name": "Name123"
		},
		{
			"type": 567,
			"name": "SecondName"

		}
	],
	"total": 2

}


Что я уже пробовал:

Я не знаю, как исправить эту ошибку... Любая помощь была бы очень кстати.

Garth J Lancaster

Не знаю точно, откуда именно вы имеете в виду ошибку - может быть, вы можете использовать Улучшить вопрос и добавьте комментарий жирным шрифтом, чтобы показать, где происходит ошибка .. может быть, вы также могли бы показать нам некоторые из Json или издевательскую версию просто так, чтобы люди могли видеть, что вы десериализуете

Member 14779968

Здравствуйте, Гарт, спасибо за ваш ответ.. Я обновил вопрос и добавил json, с которым работал..

3 Ответов

Рейтинг:
2

Gerry Schmitz

Десериализовать на .Net-классом (например, Rootobject), и идти оттуда. Это ваши занятия:

public class Rootobject {
   public object groups { get; set; }
   public Datum[] data { get; set; }
   public int total { get; set; }
}

public class Datum {
   public int type { get; set; }
   public string name { get; set; }
}


Рейтинг:
2

OriginalGriff

Проблема заключается в вашем foreach:

var resposneJson1 = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(jsonString);
            var copyOfResponseJson2 = new Dictionary<string, object>();
            foreach (KeyValuePair<string, object> myDictionary in resposneJson1)

Вы специально это говорите myDictionary это KeyValuePair<string, object> но resposneJson1 это List<Dictionary<string, object>> это означает, что каждый элемент, возвращаемый итератором, является Dictionary<string, object> а не KeyValuePair
Вероятно, вы хотите изменить его на
foreach (Dictionary<string, object> myDictionary in resposneJson1)
Но тогда вам нужно будет отсортировать тело цикла, чтобы соответствовать.


Richard Deeming

Щелк! :)

Рейтинг:
1

Richard Deeming

Цитата:
var resposneJson1 = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(jsonString);
foreach (KeyValuePair<string, object> myDictionary in resposneJson1)
Ваш responseJson1 переменная-это List<Dictionary<string, object>>.

Каждый элемент в списке-это Dictionary<string, object>.

Вы пытаетесь привести каждый элемент из списка к KeyValuePair<string, object>, что никак не может сработать. Нет никакого способа, чтобы представить весь словарь как один KeyValuePair.

Как вы это исправите, будет зависеть от исходного JSON, который вы пытаетесь десериализовать, но который вы не показали.


Member 14779968

Привет, Ричард, спасибо за твой ответ.. У меня есть обновленный вопрос с одним из Json, с которым я работал.. Пожалуйста, взгляните.