2013-06-06 1 views
2

У меня возникли проблемы с десериализацией объекта в проекте monotouch с использованием restsharp.Deserialize json-объект с неудачным массивом с конструктором по умолчанию, не найденным для типа System.String []

Я это

RestResponse<List<Product>> response = client.Execute<List<Product>> (request) as RestResponse<List<Product>>; 
      if (response.Data != null) {} 

    public class Product 
{ 
    public Product() {} 
    [PrimaryKey] 
    public string Id { get; set; } 
    public string Name { get; set; } 

    [Ignore] 
    public string[] ParentProductIds { 
    get; 
    set; 
} 

Я получаю ошибку

По умолчанию конструктор не найден для типа System.String [].

Мой JSON выглядит

[ 
    { 
    "Id" : "62907011-02f1-440a-92ec-dc35ecf695e0", 
    "Name" : "ABC", 
    "ParentProductIds" : ["2cedbcad-576a-4044-b9c7-08872de34a96", "3fcd12ce-8117-4ae7-ae4d-f539e4268e4d"] 
    }, 
    { 
    "Id" : "3fcd12ce-8117-4ae7-ae4d-f539e4268e4d", 
    "Name" : "Name 1", 
    "ParentProductIds" : null 
    } 
] 

ли это из-за нуль ParentProductId?

Может ли кто-нибудь сообщить, что мне нужно для того, чтобы принимать нулевые массивы?

ответ

2

Любой, кто имеет такую ​​же проблему, используя Список <>, работает отлично.

public List<string> ParentProductIds { 
    get; 
    set; 
8

Ключ этого вопроса является то, что RestSharp использует свой внутренний JSon/десериализации Serializer, который не поддерживает десериализации объектов массива (ParentProductIds в вашем случае). Он поддерживает десериализацию объектов List (Generics). Хотя ваше решение полностью обосновано, я считаю, что есть некоторые сценарии, в которых гораздо предпочтительнее оставить массив вместо использования дженериков. Для этого я продолжал использовать RestSharp для моих запросов на отдых, но использовал JsonConvert от James Newton-King (JSon.Net от NuGet) для десериализации из ответа. Контент.

Таким образом, вы бы добавить Json.NET в свой проект, добавить соответствующее заявление, используя и использовать следующий десериализовать ваш ответ:

var response = client.Execute(request); 
List<Product> product = JsonConvert.DeserializeObject<List<Product>>(response.Content); 

Дополнительное преимуществом является то, что JSon.Net является гораздо более эффективным сериализатором , поэтому код работает быстрее.

 Смежные вопросы

  • Нет связанных вопросов^_^