Невозможно определить структуру данных из JSON для десериализации в объект - PullRequest
0 голосов
/ 06 марта 2019

Проблемы с десериализацией строки json в объект.Основная проблема заключается в том, что я не могу определить, какой тип объекта представляет эта строка:

string jsonDataText = @"{""sun"":""heat"", ""planet"":""rock"", ""earth"":""water"", ""galaxy"":""spiral""}";

Это похоже на список объектов KeyValuePair, но когда я пытаюсь десериализовать с помощью Newtonsoft.Json:

var clone = JsonConvert.DeserializeObject<List<KeyValuePair<string,string>>>(jsonDataText);

У меня есть исключение:

 Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[System.Collections.Generic.KeyValuePair`2[System.String,System.String]]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.

Также пытался использовать Карты и строковые (многомерные) массивы, но получил то же исключение ...

Ответы [ 3 ]

2 голосов
/ 06 марта 2019

Мне кажется словарь <строка, строка>.

 JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonDataText);
0 голосов
/ 06 марта 2019

С помощью JObject легко прочитать любую пару ключ / значение из JSON.

Так что вам больше не нужно определять тип вашей пары ключ / значение в вашем json.

string jsonDataText = @"{""sun"":""heat"", ""planet"":""rock"", ""earth"":""water"", ""galaxy"":""spiral""}";

//Parse your json to dictionary
Dictionary<string, string> dict = JObject.Parse(jsonDataText).ToObject<Dictionary<string, string>>();  

Вам необходимо добавить это пространство имен в вашу программу => using Newtonsoft.Json.Linq;

Вывод:

enter image description here

0 голосов
/ 06 марта 2019

Мне кажется, что это простой класс.

public class MyClass
{
    [JsonProperty("sun")]
    public string Sun { get; set; }

    [JsonProperty("planet")]
    public string Planet { get; set; }

    [JsonProperty("earth")]
    public string Earth { get; set; }

    [JsonProperty("galaxy")]
    public string Galaxy { get; set; }
}

Десериализация:

var clone = JsonConvert.DeserializeObject<MyClass>(jsonDataText);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...