【问题标题】:Working with Json.net and Web API使用 Json.net 和 Web API
【发布时间】:2012-08-23 07:05:25
【问题描述】:

经过一番折腾,我终于让我的 Json 结果在我的 web api 中为具有关联的类正常工作:

    public string GetAll()
    {
        var order =_repository.GetAll();
        var settings = new JsonSerializerSettings
               {
                   ReferenceLoopHandling = ReferenceLoopHandling.Ignore
               };

        return JsonConvert.SerializeObject(order, settings);

    }

但是当我在浏览器或 Fiddler 中进行测试时,而不是典型的类似:

(一)

     "Books":
        [  
           {    
             "Id": "1",  
             "Name": "Book1", 
             "Authors": 
                [
                  { 
                    ....... 
                  }
               ]  
           } 
       ] 

(B) 我明白了:

"[{\"Id\":1,\"Name\":\"Book1\",\"Authors\":[{\"Id\":1,\"PersonId\":1, \"Person\":null,\"Books\":[{\"Id\":3,\"Name\":\"Book3\",\"Authors\":[{\"Id\": 4,\"PersonId\":4,\"Person\":null,\"Books\":[{\"Id\":2,\"Name\":\"Book2\",\"Authors\ ":[{\"Id\":2,\"PersonId\":2,\"Person\":null,\"Books\": .....

有人可以告诉我我必须做什么才能像上面的 A. 那样格式化它吗?

谢谢

更新:

顺便说一句,Formatting.Indented 让情况变得更糟:

"[\r\n {\r\n \"Id\": 1,\r\n \"Name\": \"Book1\",\r\n \"Authors\": [\ r\n {\r\n \"Id\": 1,\r\n \"PersonId\": 1,\r\n \"Person\": {\r\n \"Id\": 1 ,\r\n \"FirstName\": \"John\",\r\n \"LastName\": \"Doe\"\r\n },\r\n \"Books\": [\ r\n {\r\n \"Id\": 3,\r\n \"Name\": \"Book3\",\r\n \"Authors\": [\r\n {\r \n \"Id\": 4,\r\n \"PersonId\": 4,\r\n \"Person\": {\r\n \"Id\": 4,\r\n \ "名字\": \"朱莉\",\r\n

【问题讨论】:

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


    【解决方案1】:

    我认为这里的问题是 JSON 被序列化了两次,一次由您,另一次由 WebAPI。删除您的序列化,一切都应该没问题。

    【讨论】:

      【解决方案2】:

      传统方法是您的 API 控制器返回 HttpResponseMessage 或集合对象,但不是已经序列化的对象。 MediaTypeFormatter 对象会为您解决这些问题。

      看起来正在发生的是您的控制器正在返回一个字符串,该字符串 然后 被转换为 JSON 表示(因为 JSON 的 MediaTypeFormatter)。尝试更改您的控制器以仅返回对象集合(而不将其序列化为字符串),它应该适合您。

      【讨论】:

        【解决方案3】:

        settings.Formatting = Formatting.Indented;

        只是好奇...为什么您使用 JsonMediaTypeFormatter 来处理写入响应?...我看到您正在将其显式序列化为 json...

        【讨论】:

        • 我会说这取决于要求。你想支持甚至以 Xml 格式发回数据吗?你想总是用 Json 发回数据吗?如果您也想在 Xml 中发送回数据,那么您可以让内容协商过程决定哪个格式化程序可以处理写入 Order 对象...即使您想始终在 Json 中显式发送数据,您也可以使用 JsonMediaTypeFormatter也直接..
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-29
        • 2015-01-24
        • 1970-01-01
        • 2014-06-23
        • 2020-03-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多