【问题标题】:JsonConvert.Deserialize JsonResult from MVC ActionJsonConvert.Deserialize JsonResult 从 MVC 操作
【发布时间】:2016-05-17 14:44:46
【问题描述】:

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

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

CheckPlan() 返回的地方:

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

我无法解析 JsonResult 返回的成功布尔值。我试图在反序列化之后放置<Dictionary<string,string>>,但它在语法上犹豫不决。用作类型与变量等。

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

【问题讨论】:

    标签: c# json.net


    【解决方案1】:

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

    无需使用反序列化器!

    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")]
    

    【讨论】:

    • 每个人的示例中如何使用 .Data?我的 JsonResult 中的 Intillisense 中没有该属性弹出窗口?
    【解决方案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);
    

    【讨论】:

    • 太棒了,看起来应该可以了!但它不会编译。这是我所做的 JsonResultSuccess 结果 = JsonConvert.DeserializeObject(CheckPlan());编译器说有一些无效参数,无法将 JsonResult 转换为字符串。
    • 'Newtonsoft.Json.JsonConvert.DeserializeObject(string)' 无法从 'System.Web.Mvc.JsonResult' 转换为 'string'
    • 现在我明白了!无法将“f__AnonymousType3`1[System.Boolean]”类型的对象转换为“System.String”类型。
    • 似乎应该更简单。当我尝试 JsonResult result = CheckPlan() - 单独工作,但我无法访问该值。不知道为什么它现在说匿名类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多