2016-12-29 37 views
1

我是C#和新手Restherrp。使用RestSharp反序列化列表时获得空值

我在写一个小程序来通过REST检索记录列表。我已经能够检索一个记录。现在我需要获取记录列表,并且在这里我遇到了问题。

我开始使用了SoapUI的回应是这样的:

{ 
    "@count": 2, 
    "@start": 1, 
    "@totalcount": 2, 
    "Messages": [], 
    "ResourceName": "email", 
    "ReturnCode": 0, 
    "content": [ 
     {"email": {"evsysseq": "0000000000000262"}}, 
     {"email": {"evsysseq": "0000000000000263"}} 
    ] 
} 

我的代码如下所示:

class EmailID 
{ 
    public string Evsysseq { get; set; } 
} 

var client = new RestClient("xxxxx"); 
client.Authenticator = new HttpBasicAuthenticator("xxx", "xxx"); 
string queryParm = HttpUtility.UrlEncode("evsysseq>\"0000000000000261\""); 

var request = new RestRequest("xxxx?query="+ queryParm, Method.GET); 
request.RootElement = "content"; 
var queryResult = client.Execute<List<EmailID>>(request).Data; 

运行它不会导致错误,我可以queryResult对象上看到它确实包含两条记录。但是,Evsysseq在两者都是空的,那是我的问题。我不知道该如何调整才能正确。

回答

1

由于反序列化的JSON与您要反序列化的类结构不匹配,您将得到空值。您正在告诉RestSharp将content数组反序列化为List<EmailID>,但JSON实际上表示包含EmailID对象的对象列表。所以你需要另一个类:

class EmailObj 
{ 
    public EmailID Email { get; set; } 
} 

然后反序列化这样的,你应该得到的数据:

var queryResult = client.Execute<List<EmailObj>>(request).Data; 

如果你愿意,你就可以使用LINQ让你本来想List<EmailID>像这样:

var emailIds = queryResult.Select(eo => eo.Email).ToList(); 

HTH

+0

谢谢布赖恩。完美工作。非常感激。 – Tommy

+0

很高兴我能帮到你。节日快乐! –