2

我在尝试使用 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 吗?

谁能建议我需要做什么才能接受空数组?

4

2 回答 2

10

这个问题的关键是 RestSharp 使用自己的内部 Json Serializer/Deserializer,它不支持数组对象的反序列化(在您的情况下为 ParentProductIds)。它确实支持列表(泛型)对象的反序列化。尽管您的解决方案是完全有效的,但我相信在某些情况下,人们宁愿离开数组而不是使用泛型。为此,我继续使用 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 是一个更高效的序列化程序,因此代码通常运行得更快。

于 2014-07-23T22:12:27.543 回答
4

使用 List<> 遇到相同问题的任何其他人都可以正常工作。

public List<string> ParentProductIds {
    get;
    set;
于 2013-06-06T11:29:48.203 回答