JsonConvert。从MVC Action中反序列化JsonResult

时间:2014-10-23 17:24:33

标签: c# json.net

应该简单!我怎样才能完成以下任务?

JsonResult result = JsonConvert.Deserialize(CheckPlan());

CheckPlan()返回此内容:

return Json(new { success = success }, JsonRequestBehavior.AllowGet);

我无法解析JsonResult返回的成功boolean值。我试图在反序列化之后立即放置<Dictionary<string,string>>,但是它在语法上不知所措。用作类型与变量等等。

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

我知道这是一个老帖子,但我遇到了完全相同的问题,我解决了以下问题:

无需使用解串器!

dynamic result = CheckPlan().Data;    
Console.WriteLine(result.success);

在我的情况下,我正在为MVC控制器方法编写单元测试。由于测试方法在他们自己的项目中,我必须让他们访问MVC项目的内部,以便dynamic可以访问结果的Data对象的属性。为此,将以下行添加到MVC项目中的AssemblyInfo.cs

// Allow the test project access to internals of MyProject.Web
[assembly: InternalsVisibleTo("MyProject.Test")]

答案 1 :(得分:2)

假设您使用的是.NET 4.0或更高版本,可以使用dynamic

dynamic result = JsonConvert.DeserializeObject((string)CheckPlan().Data);

Console.WriteLine(result.success);

如果您不想要dynamic,可以使用success布尔属性创建自定义类:

public class Foo
{
     [JsonProperty("success")]
     public bool Success { get; set; }
}

然后:

Foo result = JsonConvert.DeserializeObject<Foo>((string)CheckPlan().Data);
Console.WriteLine(result.Success);