.net中的简单反序列化

时间:2014-03-12 23:46:42

标签: c# json json.net

我有一个JSON格式的简单字符串,就像这样返回。

{"access_token": "12345678901234567890", "token_type": "bearer"} 

这是在字符串ResponseFromServer

我想从刺痛中提取两个值,我不想去设置类等等。

我试过这个

var BearerToken = new[] { new { acccess_token = "", token_type = "" } };
var myObjects = JsonConvert.DeserializeAnonymousType(ResponseFromServer, BearerToken);

但它不起作用,任何简单的想法?

1 个答案:

答案 0 :(得分:3)

你遇到的问题是这里

var BearerToken = new[] { new { acccess_token = "", token_type = "" } };

您将BearerToken声明为匿名类型数组,而在json中您有一个对象。此外,请注意拼写错误:在json中,access_token在类型声明时您有acccess_token

为简单起见,您可以使用C#的动态功能

var str = "{\"access_token\": \"12345678901234567890\", \"token_type\": \"bearer\"}";

dynamic myObject = JsonConvert.DeserializeObject(str);

Console.WriteLine(myObject.access_token); //prints 12345678901234567890
Console.WriteLine(myObject.token_type); //prints bearer

使用匿名类型的工作示例(注意,你有BearerToken声明错误,你在json有一个对象,而不是数组)如下所示:

var ResponseFromServer = "{\"access_token\": \"12345678901234567890\", \"token_type\": \"bearer\"}";

var BearerToken = new { access_token = "", token_type = "" };

var myObject = JsonConvert.DeserializeAnonymousType(ResponseFromServer, BearerToken);

Console.WriteLine(myObject.access_token); //prints 12345678901234567890
Console.WriteLine(myObject.token_type); //prints bearer

working example for parsing with anonymous type

working example for parsing with dynamic binding

如果您确定需要拥有一个对象数组,那么您需要将json包装成方括号[]。这表明您有一系列项目。然后在修复拼写错误后,您可以打印该数组中第一个项目的值:

Console.WriteLine(myObjects[0].access_token);
Console.WriteLine(myObjects[0].token_type);