RestSharp: не удается десериализовать массив

#c# #deserialization #restsharp

#c# #десериализация #restsharp

Вопрос:

Я использую RestSharp. У меня есть следующий код:

 public void MyMethod()
{
       var client = new RestClient("https://test_site/api");
       var request = new RestRequest("/endpoint", Method.GET);

       var response = client.Execute<List<MyMapClass>>(request);
}
  

Моя проблема в том, что во всех примерах, которые я видел, JSON имеет вид «свойство»:»значение».

Однако в моем случае у меня просто есть массив строк:

 [
  "Str1",
  "Str2",
  "Str3"
]
  

Итак, я знаю, как десериализовать объект, когда JSON имеет форму «property»:»value», но мой вопрос таков: как я могу десериализовать массив строк?

Комментарии:

1. Просто десериализуйте его в какую-то коллекцию строк (например, string array)?

2. Как [ "Str1", "Str2", "Str3" ] относится к MyMapClass ?

Ответ №1:

Обратите внимание на квадратную скобку, а не на фигурную. Фигурные скобки представляют объект, квадратные скобки представляют массив.

 var response = client.Execute<List<string>>(request);
  

Или

 var response = client.Execute<string[]>(request);
  

У вас также может быть массив в объекте (см. Цвета)

 {
    "name": "iPhone 7 Plus",
    "manufacturer": "Apple",
    "deviceType": "smartphone_tablet",
    "searchKey": "apple_iphone_7_plus",
    "colors": ["red", "blue"]
}
  

и соответствующая модель будет выглядеть следующим образом:

 public class MyMapClass 
{
    public string Name { get; set; }
    public string Manufacturer { get; set; }
    public string DeviceType { get; set; }
    public string SearchKey { get; set; }
    public List<string> Colors { get; set; }
}
  

Комментарии:

1. Как это связано с тем, что запрашивает OP?

2. Похоже, что OP запутался в различиях между массивом в JSON и объектом. Это была попытка прояснить разницу. Не стесняйтесь добавлять лучший ответ.

3. Я не мог предложить ответ, потому что, как я это вижу, они спрашивают, как десериализовать [ "Str1", "Str2", "Str3" ] в MyMapClass . Для меня это просто не имеет смысла.

4. @Enigmativity то, как я это прочитал (и я думаю, как это прочитал Шейн), заключалось в том, что OP знает, как десериализовать объект ( «во всех примерах, которые я видел, JSON имеет форму «property»:»value»» ), но не знает, как построить модель для десериализации массива строк ( «Однако в моем случае у меня просто есть массив значений переменного размера:» ).

5. @John — Да, я тоже так это прочитал. Их конкретный вопрос был «Итак, в этом случае, как должен быть определен MyMapClass класс?» вот почему я думаю, что мы должны знать, как [ "Str1", "Str2", "Str3" ] сопоставляется с MyMapClass , чтобы иметь возможность предоставить ответ.