Tuesday, May 23, 2017

wcf JSON deserialization

this
new JavaScriptSerializer().Deserialize<Dictionary<string, string>>(results)
will not work with complex objects

you need to create objects

for example, this is the IManage Login JSON

[DataContract]
    public class IManageUser
    {
        [DataMember(Name = "email")]
        public string email { get; set; }
        [DataMember(Name = "full_name")]
        public string full_name { get; set; }
        [DataMember(Name = "user_id")]
        public string user_id { get; set; }
    }

    [DataContract]
    public class IManageLoginInfo
    {
        [DataMember(Name = "X-Auth-Token")]
        public string X_Auth_Token { get; set; }
        [DataMember(Name = "max_age")]
        public int max_age { get; set; }
        [DataMember(Name = "persona")]
        public string persona { get; set; }
        [DataMember(Name = "user")]
        public IManageUser user { get; set; }

    }

then you could do something like this:
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
                StreamReader sr = new StreamReader(resp.GetResponseStream());
                results = sr.ReadToEnd();
                sr.Close();
                IManageLoginInfo info = null;
                using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(results)))
                {
                    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(IManageLoginInfo));
                    info = (IManageLoginInfo)serializer.ReadObject(ms);
                }
                this.token = info.X_Auth_Token;

No comments:

Post a Comment