使用RestSharp反序列化数据的问题

时间:2018-02-05 18:25:03

标签: c# asp.net json web-services restsharp

我很难通过RestSharp反序列化从Web服务返回的数据。以下是POST请求返回的数据。

{
"responseCPUTime": "0",
"response": "PASS",
"responseFor": "getSalesOrders",
"responseData": {
"salesOrders": [
  {
            "loadStatus": "",
            "comments": "",
            "modifyDate": "20180130",
            "custShipToID": "",
            "invoiceCount": "0",
            "custBillToID": "WINDJ",
            "invoiceAmount": "12280.00",
            "pickDate": "20180204",
            "warehouse": "~D",
            "custName": "WINN DIXIE JACKSONVILLE",
            "modifyTime": "102614",
            "loadID": "",
            "createTime": "075610",
            "createdBy": "RGN",
            "custPONum2": "",
            "modifiedBy": "KAL",
            "SONum": "00855494",
            "deliveryDate": "20180205",
            "tripNumber": "",
            "custPONum": "66523",
            "status": "O",
            "createDate": "20180125"
            },
              {
            "loadStatus": "",
            "comments": "",
            ......
            }
            ],
    },
"responseMessage": ""
}

这是我试图将数据反序列化的模型。

型号:

public class SalesOrder
{
    public string loadStatus { get; set; }
    public string comments { get; set; }
    public string modifyDate { get; set; }
    public string custShipToID { get; set; }
    public string invoiceCount { get; set; }
    public string custBillToID { get; set; }
    public string invoiceAmount { get; set; }
    public string pickDate { get; set; }
    public string warehouse { get; set; }
    public string custName { get; set; }
    public string modifyTime { get; set; }
    public string loadID { get; set; }
    public string createTime { get; set; }
    public string createdBy { get; set; }
    public string custPONum2 { get; set; }
    public string modifiedBy { get; set; }
    public string SONum { get; set; }
    public string deliveryDate { get; set; }
    public string tripNumber { get; set; }
    public string custPONum { get; set; }
    public string status { get; set; }
    public string createDate { get; set; }
}

public class ResponseData
{
    public List<SalesOrder> salesOrders { get; set; }
}

public class RootObject
{
    public string responseCPUTime { get; set; }
    public string response { get; set; }
    public string responseFor { get; set; }
    public ResponseData responseData { get; set; }
    public string responseMessage { get; set; }
}

这是成功提取数据但似乎无法加载到SalesOrderModel列表中的类。

类别:

 public List<SalesOrderModel> GetSalesOrders(string company, string custBillToID, string startShipDate, string endShipDate)
    {
        var client = new RestClient("https://xxxxxxx.xxxxxx.com");
        var request = new RestRequest("xxx/services", Method.POST);
        request.AddHeader("header", @"accept: application/json
                                        accept-encoding: gzip, deflate
                                        accept-language: en-US, en; q=0.8
                                        content-type: application/json
                                        user-agent: Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");

        request.AddParameter("appId", "xxxxxx");
        request.AddParameter("command", "getSalesOrders");
        request.AddParameter("company", "0007");
        request.AddParameter("startDeliveryDate", "20180205");
        request.AddParameter("endDeliveryDate", "20180205");
        request.AddParameter("status", "O");


        IRestResponse <List<SalesOrderModel>> response = client.Execute<List<SalesOrderModel>>(request);
        return response.Data;

    }

有人能指出我如何正确映射返回到模型类的数据吗?

由于

编辑:我更新了我的模型以包含各种各样的“包装”。

现在我的问题是,在视图中访问此数据的最佳方法是什么?

修改: 视图:

@model DirectOrderTracker.Models.RootObject


@foreach (var item in @Model.responseData.salesOrders)
{
    @item.custBillToID
}

1 个答案:

答案 0 :(得分:2)

您的json和反序列化的模型是不可比的。您正在尝试将非集合json反序列化为类似List的集合。所以,像这样修改你的模型;

public class SalesOrder
{
    public string loadStatus { get; set; }
    public string comments { get; set; }
    public string modifyDate { get; set; }
    public string custShipToID { get; set; }
    public string invoiceCount { get; set; }
    public string custBillToID { get; set; }
    public string invoiceAmount { get; set; }
    public string pickDate { get; set; }
    public string warehouse { get; set; }
    public string custName { get; set; }
    public string modifyTime { get; set; }
    public string loadID { get; set; }
    public string createTime { get; set; }
    public string createdBy { get; set; }
    public string custPONum2 { get; set; }
    public string modifiedBy { get; set; }
    public string SONum { get; set; }
    public string deliveryDate { get; set; }
    public string tripNumber { get; set; }
    public string custPONum { get; set; }
    public string status { get; set; }
    public string createDate { get; set; }
}

public class ResponseData
{
    public List<SalesOrder> salesOrders { get; set; }
}

public class JsonObject
{
    public string responseCPUTime { get; set; }
    public string response { get; set; }
    public string responseFor { get; set; }
    public ResponseData responseData { get; set; }
    public string responseMessage { get; set; }
}

并将其反序列化为JsonObject;

IRestResponse<JsonObject> response = client.Execute<JsonObject>(request);
相关问题