使用数组反序列化json对象失败,并且找不到类型System.String []的Default构造函数

时间:2013-06-06 10:45:42

标签: json c#-4.0 xamarin.ios restsharp

尝试使用restsharp在单触发项目中反序列化对象时遇到了一些麻烦。

我有这个

    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
    }
]

是否归因于null ParentProductId?

任何人都可以建议我需要做什么才能接受空数组吗?

2 个答案:

答案 0 :(得分:9)

此问题的关键是RestSharp使用自己的内部Json Serializer / Deserializer,它不支持数组对象的反序列化(在您的情况下为ParentProductIds)。它确实支持List(Generics)对象的反序列化。虽然您的解决方案完全有效,但我相信在某些情况下,更倾向于离开阵列而不是使用泛型。为此,我继续使用RestSharp作为我的休息请求,但是使用了来自James Newton-King的JsonConvert(来自NuGet的JSon.Net)来从response.Content反序列化。

因此,您可以将Json.Net添加到项目中,添加相应的using语句并使用以下内容反序列化您的响应:

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

额外的好处是JSon.Net是一个更高效的序列化程序,因此代码运行速度更快。

答案 1 :(得分:3)

使用List&lt;&gt;的其他人遇到同样的问题相反,工作正常。

public List<string> ParentProductIds {
    get;
    set;