在C#中反序列化JSON时出错

时间:2015-07-29 09:42:34

标签: c# json javascriptserializer

我尝试使用JavaScriptSerializer的方法反序列化,但它不起作用。不确定我的代码与此example之间有什么不同。

public void Main()
            {
              var dataResponse =@"{\"access_token\": \"NAonCg8KBHBpYXMSABoAJRAluFUSFAD2I2fXOrgvxInfWWG0UUsoqsby\", \"expires_in\": 28800}"

              JSON elements = new JavaScriptSerializer().Deserialize<JSON>(dataResponse);

              foreach (var item in elements.data) 
              {
                 MessageBox.Show(item.access_token.ToString());
              }

            } 
        public class JSON
            {
                public List<JSONElements> data { get; set; }
            } 
        public class JSONElements
            {
                public string access_token { get; set; }
                public int expired_in { get; set; }
            } 

2 个答案:

答案 0 :(得分:2)

首先:

您的json字符串与JSONElements类中的属性不匹配。int成员名称不同。

第二

在使用JSON.Net时使用json。然后您将反序列化为错误的类型。您的json字符串不包含任何属性data。而是JSONElements对象。

第三

如果您将@符号与字符串一起使用,则无法转义字符

所以试试:

    var dataResponse =@"{'access_token':'NAonCg8KBHBpYXMSABoAJRAluFUSFAD2I2fXOrgvxInfWWG0UUsoqsby','expires_in':28800}";    
    var data = JsonConvert.DeserializeObject<JSONElements>(dataResponse);

它有效。

enter image description here

答案 1 :(得分:0)

检查字符串编码。也许这样的事情会起作用

var dataResponse =@"{""access_token"": ""NAonCg8KBHBpYXMSABoAJRAluFUSFAD2I2fXOrgvxInfWWG0UUsoqsby"", ""expires_in"": ""28800""}";