0

多くの論争の後、私は最終的に、関連付けを持つクラスの Web API で Json の結果が適切に機能するようになりました。

    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,\"名前\":\"Book1\",\"著者\":[{\"Id\":1,\"PersonId\":1,\"人\":null,\"本\":[{\"Id\":3,\"名前\":\"Book3\",\"著者\":[{\"Id\":4,\ "PersonId\":4,\"Person\":null,\"Books\":[{\"Id\":2,\"Name\":\"Book2\",\"Authors\":[ {\"Id\":2,\"PersonId\":2,\"Person\":null,\"本\": .....

上記のA.のようにフォーマットするために何をしなければならないか教えてもらえますか?

ありがとう

アップデート:

ところで、 Formatting.Indented はそれをさらに悪化させました:

"[\r\n {\r\n \"ID\": 1,\r\n \"名前\": \"Book1\",\r\n \"著者\": [\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 \"名前\": \"Book3\",\r\n \"著者\": [\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

ここでの問題は、JSON が 2 回シリアル化されていることだと思います。1 回はあなたが、もう 1 回は WebAPI です。シリアライゼーションを削除すると、すべて問題ありません。

于 2012-12-12T00:55:39.993 に答える
0

settings.Formatting = Formatting.Indented;

好奇心が強い... JsonMediaTypeFormatter を使用して応答の書き込みを処理している理由は何ですか?... json に明示的にシリアル化していることがわかります...

于 2012-08-28T18:14:15.520 に答える