12

みんな私はユーザーと呼ばれる同じクラスと1対多の関係を持ってい
ます.Web APIのgetメソッドでユーザーの1つのインスタンスを返しています.

User 

ID  | Name 
0   | A 
1   | B 

Friends Table ( This table is used to build the one to many relationship ) 

User_ID | Friend_ID 
 1      |     0 
 0      |     1 

これは私のGetMethodです

[HttpGet]
        public Models.User   Authenticate()
        {
            try
            {
                return   db.Users.SingleOrDefault(x => x.ID == 0 ) ; 
            } 
            catch
            {
                return null;
            }
        }

User エンティティを取得して返すと、打撃エラーが発生します

以下のエラーを修正するのを手伝ってもらえますか?

{"メッセージ":"エラーが発生しました。","ExceptionMessage":"'ObjectContent`1' タイプは、コンテンツ タイプ 'text/html; charset=utf-8' の応答本文をシリアル化できませんでした。","ExceptionType ":"System.InvalidOperationException","StackTrace":null,"InnerException":{"メッセージ":"エラーが発生しました。","ExceptionMessage":"型 'System.Data.Entity.DynamicProxies で検出された自己参照ループ.Friend_E5C79F4736EB2750392FFC7061B18E9C12F15F9583409603C75C5D1B1F7358D4'. パス 'Friends1[0].User.Friends'.","ExceptionType":"Newtonsoft.Json.JsonSerializationException","StackTrace":" Newtonsoft.Json.Json.SerializerInternal.Serialization でCheckForCircularReference(JsonWriter ライター、オブジェクト値、JsonProperty プロパティ、JsonContract コントラクト、JsonContainerContract containerContract、JsonProperty containerProperty)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter ライター、IWrappedCollection 値、JsonArrayContract コントラクト、JsonProperty メンバー、JsonContainerContract コレクションコントラクト、 JsonProperty containerProperty)\r\n Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter ライター、オブジェクト値、JsonContract valueContract、JsonProperty メンバー、JsonContainerContract containerContract、JsonProperty containerProperty) で\r\n Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject で(JsonWriter ライター、オブジェクト値、JsonObjectContract コントラクト、JsonProperty メンバー、JsonContainerContract collectionContract、JsonProperty containerProperty)\r\n Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter ライター、オブジェクト値、JsonContract valueContract、JsonProperty メンバー、JsonContainerContract containerContract、JsonProperty containerProperty)\r\n Newtonsoft.Json.Serialization. JsonSerializerInternalWriter.SerializeObject(JsonWriter ライター、オブジェクト値、JsonObjectContract 契約、JsonProperty メンバー、JsonContainerContract コレクション契約、JsonProperty コンテナーProperty)\r\n Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter ライター、オブジェクト値、JsonContract 値契約、JsonProperty メンバー、JsonContainerContract でcontainerContract, JsonProperty containerProperty)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter ライター、IWrappedCollection 値、JsonArrayContract コントラクト、JsonProperty メンバー、JsonContainerContract collectionContract、JsonProperty containerProperty)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter ライター、オブジェクト値、JsonContract valueContract、JsonProperty メンバー、JsonContainerContract containerContract、 JsonProperty containerProperty)\r\n Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter ライター、オブジェクト値、JsonObjectContract コントラクト、JsonProperty メンバー、JsonContainerContract collectionContract、JsonProperty containerProperty) で\r\n Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue で(JsonWriter ライター、Object 値、JsonContract 値Contract、JsonProperty メンバー、JsonContainerContract containerContract、JsonProperty containerProperty)\r\n Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter、オブジェクト値) で\r\n Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter、オブジェクト値) で\r\n System.Net.Http.Formatting.JsonMediaTypeFormatter.<>c__DisplayClassd.b__c()\r\n で Newtonsoft.Json.JsonSerializer.Serialize(JsonWriter jsonWriter, Object value)\r\n でRunSynchronously(Action アクション、CancellationToken トークン)"}}Serialize(JsonWriter jsonWriter, Object value)\r\n at System.Net.Http.Formatting.JsonMediaTypeFormatter.<>c__DisplayClassd.b__c()\r\n at System.Threading.Tasks.TaskHelpers.RunSynchronously(Action アクション、CancellationToken トークン) )"}}Serialize(JsonWriter jsonWriter, Object value)\r\n at System.Net.Http.Formatting.JsonMediaTypeFormatter.<>c__DisplayClassd.b__c()\r\n at System.Threading.Tasks.TaskHelpers.RunSynchronously(Action アクション、CancellationToken トークン) )"}}

4

2 に答える 2

31

webApi フォーマッタを変更してみてください。WebApiConfig.cs に次の行を追加します。

var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);

次の行を追加します。

json.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
于 2013-10-29T16:58:20.823 に答える