Десериализовать Json без имени Поля и строка формата, массив

1

У меня есть следующий объект json:

[
   "sd",
   [
      "sdg\u0026e",
      "sdlc",
      "sdccu",
      "sdsu webportal",
      "sdsu",
      "sdsu blackboard",
      "sdcc",
      "sd card",
      "sdn",
      "sdro"
   ]
]

Получено из google с этим URL-адресом:

http://suggestqueries.google.com/complete/search?output=firefox&hl=en&q=sd

Я попытался десериализировать его так:

dynamic objson = JsonConvert.DeserializeObject(res);

Но это не полезно, потому что мне нужно это в объект класса.

А также использование типов:

public class SuggestClass
    {
        public string search { get; set; }
        public string[] terms { get; set; }
    }


var result = JsonConvert.DeserializeObject<SuggestClass>(res);

Но это всегда исключение.

Я не знаю, как это сделать, не имея полей имени.

РЕДАКТИРОВАТЬ:

Другой JSON:

["text",["textura","textos bonitos","texto argumentativo","textos","textos de amor","texto expositivo","texturas minecraft","textos de reflexion","texture pack minecraft","textos en ingles"]]
  • 0
    Это правильный объект JSON? потому что для меня это выглядит как массив. не фактический объект? В любом случае, не лучше ли вводить ключи, очевидно, у вашего SuggestClass есть свойства, так что это означает, что у вашего JSON могут быть ключи, нет?
  • 0
    Я получил это от Google. Обновлен источник URL
Показать ещё 3 комментария
Теги:
deserialization
json.net

2 ответа

1
Лучший ответ

Это сложно...

Но так как это массив, вы можете создать фабричный метод для разбора SuggestClass из заданного JArray.

public void SomeMethod()
{
    string json =
        "[\"sd\",[\"sdg\u0026e\",\"sdlc\",\"sdccu\"" + 
        ",\"sdsu webportal\",\"sdsu\",\"sdsu blackboard\","+
        "\"sdcc\",\"sd card\",\"sdn\",\"sdro\"]]";

    var factory = new Factory();
    var suggest = factory.Create(json);

    Console.WriteLine(suggest);
}

public class Factory
{
    public SuggestClass Create(string json)
    {
        var array = JArray.Parse(json);
        string search = array[0].ToString();
        string[] terms = array[1].ToArray().Select(item => item.ToString()).ToArray();

        return new SuggestClass {Search = search, Terms = terms};
    }
}

public class SuggestClass
{
    public string Search { get; set; }
    public IEnumerable<string> Terms { get; set; }
    public override string ToString()
    {
        return string.Format("Search={0},Terms=[{1}]", 
            Search, string.Join(",", Terms));
    }
}

Будет печать на консоль:

Search=sd,Terms=[sdg&e,sdlc,sdccu,sdsu webportal,sdsu,sdsu blackboard,sdcc,sd card,sdn,sdro]

И другой JSON, который вы предоставили:

Search=sd,Terms=[sdg&e,sdlc,sdccu,sdsu webportal,sdsu,sdsu blackboard,sdcc,sd card,sdn,sdro] Search=text,Terms=[textura,textos bonitos,texto argumentativo,textos,textos de amor,texto expositivo,texturas minecraft,textos de reflexion,texture pack minecraft,textos en ingles]

  • 0
    Отличный подход @Mikko Viitala
0

Просто использовал визуализатор JSON в визуальной студии. Вот как это выглядит.

Изображение 174551

Это массив из нескольких типов. Для его анализа можно использовать следующий код. Но это еще не совсем.

var objson = JsonConvert.DeserializeObject<object[]>(res);

Поэтому я думаю, что ответ @Mikko имеет лучший подход.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню