Мне труднее всего десериализовать строку json.
Я использовал API RestSharp, который отлично работал, если я указал RootElement в запросе. Затем я перешел в Hammock для функциональности OAuth, но десериализация не так легко работает.
Я пытался использовать DataContractJsonSerializer
DataContractJsonSerializer ser = новый DataContractJsonSerializer (typeof (Список));
var member = (Список) ser.ReadObject (response.ContentStream);
но это дает мне InvalidCastException.
Я пробовал JsonConvert
var members = JsonConvert.DeserializeObject<List<Member>>(response.Content);
но я получаю исключение: Невозможно десериализовать объект JSON в тип 'System.Collections.Generic.List`1 [Member]'.
RestSharp легко позаботился об этом при вызове ExecuteAsync. Client.ExecuteAsync<List<Member>>(request, (response) =>
Я в своем уме. Может быть, мне нужен гамак, эквивалентный свойству RestSharp RootElement ?? Это просто, что мой Json трудно конвертировать?
Вот мой объект Member
public partial class Member
{
public string State { get; set; }
public string Joined { get; set; }
public string lat { get; set; }
public string Zip { get; set; }
public string Bio { get; set; }
public string Name { get; set; }
public string City { get; set; }
public string Id { get; set; }
public string Link { get; set; }
public string Country { get; set; }
public string Visited { get; set; }
public string Photo_url { get; set; }
public string lon { get; set; }
}
вот этот Json:
{
"results": [
{
"zip": "11111",
"lon": "-122.22000122070312",
"photo_url": "http: //photos1.aaaaa.com/photos/member/1/6/c/e/member_4469838.jpeg",
"link": "http: //www.aaaa.com/members/7804365",
"state": "AA",
"lang": "en_US",
"city": "MyCity",
"country": "us",
"id": "7804365",
"visited": "Sat Feb 19 02: 36: 40 EST 2011",
"topics": [
{
"id": 3340,
"urlkey": "pickupsoccer",
"name": "Pick-up Soccer"
},
{
"id": 468,
"urlkey": "dads",
"name": "Dads"
},
{
"id": 20557,
"urlkey": "coed-soccer",
"name": "Coed Soccer"
},
{
"id": 148421,
"urlkey": "windowsphone",
"name": "Windows Phone"
}
],
"joined": "Thu Aug 07 15: 32: 06 EDT 2008",
"bio": "",
"name": "aaa bbbb",
"other_services": {
"linkedin": {
"identifier": "http: //www.bbb.com/in/zzzzz"
}
},
"lat": "47.790000915527344"
}
],
"meta": {
"lon": "",
"count": 1,
"link": "https: //api.aaaaa.com/members",
"next": "",
"total_count": 1,
"url": "https: //api.aaaaa.com/members?relation=self&order=name&offset=0&format=json&page=800",
"id": "",
"title": "Members",
"updated": "Fri Sep 10 13: 08: 07 EDT 2010",
"description": "API method",
"method": "Members",
"lat": ""
}
}
UPDATE
Исправлена ошибка с добавлением объекта-оболочки для моего класса Member, который инкапсулирует весь результат json.
public partial class Members
{
public List<Member> results { get; set; }
public object meta { get; set; }
}
Тогда я могу десериализовать, используя следующее:
var members = JsonConvert.DeserializeObject<Members>(jsonstring);