0

经过一番争论,我终于让我的 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 \"FirstName\ ":\"朱莉\",\r\n

4

3 回答 3

2

传统方法是您的 API 控制器返回一个HttpResponseMessage或一个集合对象,而不是已经序列化的对象。这些MediaTypeFormatter对象会为你处理好这些。

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

于 2012-08-28T20:16:37.153 回答
0

settings.Formatting = Formatting.Indented;

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

于 2012-08-28T18:14:15.520 回答
0

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

于 2012-12-12T00:55:39.993 回答