【问题标题】:Nested object JSON serialization in WebAPIWebAPI 中的嵌套对象 JSON 序列化
【发布时间】:2015-11-29 19:43:45
【问题描述】:

我正在使用 .NET 4.0、MVC 4、Web API。我有以下数据结构:

Dictionary<Actor, Int32> TopActorToMovieCount = new Dictionary<Actor, Int32>(10);

WebApiConfig 中的以下条目:

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));  

在我的控制器中,我以这种方式返回TopActorToMovieCount

    [HttpGet]
    public HttpResponseMessage HighestMovies()
    {            
        return Request.CreateResponse(HttpStatusCode.OK, MvcApplication.TopActorToMovieCount);
    }

但它给出的 JSON 输出是:

{"api.Models.Actor":137,"api.Models.Actor":125,"api.Models.Actor":99,"api.Models.Actor":96,"api.Models.Actor":83,"api.Models.Actor":82,"api.Models.Actor":81,"api.Models.Actor":79,"....

为什么它没有为 Actor 的对象提供 JSON 结构?

我确定我遗漏了一些东西,但我想不通。我尝试添加以下内容,但没有成功:

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));

PS:当我切换到 XML 输出时,它工作正常。

【问题讨论】:

    标签: json asp.net-mvc-4 asp.net-web-api


    【解决方案1】:

    在此处查看类似问题:Not ableTo Serialize Dictionary with Complex key using Json.net

    在这种情况下,您使用“Actor”作为字典的键。字典存储键/值对。因此,在创建 JSON 响应时,它将“Actor”解释为转换为字符串的键,并将“Int32”解释为值,从而为您提供

    {"api.Models.Actor":137}{key:value}

    因为

    Actor.ToString() 将导致"api.Models.Actor"

    这是字典定义的链接:https://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx

    【讨论】:

    • 但在这种情况下,如果我只是序列化 List 那也应该给我 api.Models.Actor,因为 .toString() 在这种情况下也会出现。但是 List 的序列化给了我正确的结果。
    猜你喜欢
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    相关资源
    最近更新 更多