【问题标题】:RestAPI Deserialization VendAPIRest API 反序列化 Vend API
【发布时间】:2016-01-27 04:11:59
【问题描述】:

我正在尝试通过 restAPI 调用 Vend API。

我调用调用来执行数据并将数据检索到内容中,但是当我尝试通过数据属性访问反序列化对象时,项目列表

var response = client.Execute(request);

我在列表中有一个条目,条目为空/null。

API 描述于https://developers.vendhq.com/documentation/api/0.x/consignments.html

我的序列化对象代码是:

public class stock_movements : List<Stock_Movement>
{
    public stock_movements()
    {
    }
}

public class Stock_Movement
{
    public string id {get; set;}
    public string name {get; set;}
    public string type {get; set;}
    public DateTime date {get; set;}
    public string outlet_id {get; set;}
    public string supplier_id {get; set;}
    public string status {get; set;}
    public DateTime received_at {get; set;}
    public DateTime created_at {get; set;}
    public DateTime updated_at {get; set;}

    public List<Product> products { get; set; }

    public Stock_Movement()
    {
    }
}

public class Product
{
        public string id {get; set;}
        public string product_id {get; set;}
        public string name {get; set;}
        public int count {get; set;}
        public int received {get; set;}
        public Decimal cost {get; set;}
        public DateTime created_at {get; set;}
        public DateTime updated_at {get; set;}
}

调用API的代码是:

    public stock_movements get_StockMovements()
    {
        var request = new RestRequest("stock_movements", Method.GET);
        return Execute<stock_movements>(request);
    }

    private T Execute<T>(RestRequest request) where T : new()
    {
        var client = new RestClient(Constants.VendAPIBaseURL);

        request.AddParameter("access_token", _auth.access_token, ParameterType.QueryString);

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


        if (response.ErrorException != null)
        {
            const string message = "Error retrieving response.  Check inner details for more info.";
            var vendException = new ApplicationException(message, response.ErrorException);
            throw vendException;
        }

        return response.Data;

    }   //  private T Execute<T>(RestRequest request) where T : new()

【问题讨论】:

    标签: c# asp.net-mvc restsharp


    【解决方案1】:

    我认为你的类 stock_movements 是错误的:反序列化器可能期望一个具有列表属性而不是继承列表的类。

    // old -> public class stock_movements : List<Stock_Movement>
    public class StockMovementsResponse
    {
        public IList<Stock_Movement> StockMovements { get; set; }
    }
    

    然后调用:

    Execute<StockMovementsResponse>(request);
    

    【讨论】:

    • 它可以工作,只是我必须将其定义为 List 而不是 IList 才能从接口实现具体类。非常感谢您的帮助。
    猜你喜欢
    • 2018-01-25
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多