无法使用oData获取JsonConvert.DeserializeObject

时间:2018-03-20 16:58:28

标签: json rest odata

我是一个看起来像这样的课程:

public class AccountAddress
{
    [Key]
    public int accountNumber { get; set; }
    public int rowNumber { get; set; }

    public string civicaddress { get; set; }

    public AccountAddress()
    {
        //Default constructor
    }
}

有一个rest API,它返回一个AccountAddress列表作为oData,看起来像这样一个变量"结果":

{
  "@odata.context":"http://localhost:52139/odata/$metadata#WEB_V_CIVIC_ADDRESS/Values.Classes.Entities.AccountAddress","value":[
    {
      "@odata.type":"#Values.Classes.Entities.AccountAddress","accountNumber":123456,"rowNumber":0,"civicaddress":"123 FAKE EAST DRIVE"
    },{
      "@odata.type":"#Values.Classes.Entities.AccountAddress","accountNumber":123457,"rowNumber":0,"civicaddress":"123 FAKE WEST DRIVE"
    }
  ]
}

当我尝试使用时:

var addressAccountLookup =  Newtonsoft.Json.JsonConvert.DeserializeObject<List<AccountAddress>>(result);

我收到错误

Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[ATPublicTAX.Regina.ca.Values.Classes.Entities.AccountAddress]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.

对此的任何帮助将不胜感激。

感谢。

2 个答案:

答案 0 :(得分:0)

您将整个对象传递给反序列化方法。你只需要传递数组,这就是它要求你做的事情。

JArray array = (JArray) result["value"];
var addressAccountLookup =  Newtonsoft.Json.JsonConvert.DeserializeObject<List<AccountAddress>>(array);

这样的事情应该有用。

答案 1 :(得分:0)

我开始工作的解决方案是创建一个类:

private class oDataResponse<T>
    {
        public List<T> Value { get; set; }
    }

然后像这样反序列化:

var oDataRespone = Newtonsoft.Json.JsonConvert.DeserializeObject<oDataResponse<AccountAddress>>(result);