windows phone 7 - Trouble deserializing Json from REST service -


i'm having hardest time deserializing json string.

i using restsharp api worked great if specified rootelement on request. moved hammock oauth functionality, deserialization isn't working easily.

i've tried using datacontractjsonserializer

datacontractjsonserializer ser = new datacontractjsonserializer(typeof(list)); var member = (list)ser.readobject(response.contentstream);

but gives me invalidcastexception.

i tried jsonconvert

var members = jsonconvert.deserializeobject<list<member>>(response.content); 

but exception: cannot deserialize json object type 'system.collections.generic.list`1[member]'.

restsharp took care of when calling executeasync. client.executeasync<list<member>>(request, (response) =>

i'm @ wits end. maybe need hammock equivalent restsharp's rootelement property?? json difficult convert?

here member object

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; } } 

here 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 adding wrapper object member class encapsulates entire json result fixed this.

public partial class members {     public list<member> results { get; set; }     public object meta { get; set; } } 

then can can deserialize using following:

var members = jsonconvert.deserializeobject<members>(jsonstring); 

there 3 problem areas in json data:

  1. the way presented here, contains lot of backslashes , double quotes @ beginnging , end don't work in json. it's difficult tell question whether artifact of copying visualstudio debugger or problem in data.

  2. the transmitted data not list of member instance rather object containing both list of member instances , additional meta information. need introduce additional class 2 members results , meta.

  3. your class member uses properties starting uppercase letter while json data uses lowercase letters. can either change property names or uses data datamember annoation:

so solution be:

datacontractjsonserializer ser = new datacontractjsonserializer(typeof(jsonresponse)); jsonresponse jsonresponse = (jsonresponse)ser.readobject(response.contentstream); 

with following class definitions:

[datacontract] public partial class member  {     [datamember(name = "state")]     public string state { get; set; }     [datamember(name = "joined")]     public string joined { get; set; }     [datamember(name = "lat")]     public string lat { get; set; }     [datamember(name = "zip")]     public string zip { get; set; }     [datamember(name = "bio")]     public string bio { get; set; }     [datamember(name = "name")]     public string name { get; set; }     [datamember(name = "state")]     public string city { get; set; }     [datamember(name = "city")]     public string id { get; set; }     [datamember(name = "link")]     public string link { get; set; }     [datamember(name = "country")]     public string country { get; set; }     [datamember(name = "visited")]     public string visited { get; set; }     [datamember(name = "photo_url")]     public string photourl { get; set; }     [datamember(name = "lon")]     public string lon { get; set; } }  [datacontract] public class meta {     [datamember(name = "lon")]     public string lon { get; set; }     [datamember(name = "count")]     public int count { get; set; }     [datamember(name = "link")]     public string link { get; set; }     [datamember(name = "next")]     public string next { get; set; }     [datamember(name = "total_count")]     public int totalcount { get; set; } }  [datacontract] public class jsonresponse {     [datamember(name = "results")]     public list<member> results { get; set; }     [datamember(name = "meta")]     public meta meta { get; set; } } 

Comments

Popular posts from this blog

apache - Add omitted ? to URLs -

redirect - bbPress Forum - rewrite to wwww.mysite prohibits login -

php - How can I stop spam on my custom forum/blog? -