加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么在web api中返回一个具有一对多关系的实体会导致错

发布时间:2020-12-15 06:23:36 所属栏目:百科 来源:网络整理
导读:我有一对一的关系到同一个类叫用户, 我在web apis get方法中返回一个用户实例 它工作正常,只要我没有任何 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 这是我
我有一对一的关系到同一个类叫用户,
我在web apis get方法中返回一个用户实例
它工作正常,只要我没有任何
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;
            }
        }

如果我得到并返回一个用户实体,那么我会得到打击错误

任何人都可以帮我修复以下错误?

{“Message”:”An error has occurred.”,”ExceptionMessage”:”The ‘ObjectContent`1’ type failed to serialize the response body for content type ‘text/html; charset=utf-8’.”,”ExceptionType”:”System.InvalidOperationException”,”StackTrace”:null,”InnerException”:{“Message”:”An error has occurred.”,”ExceptionMessage”:”Self referencing loop detected with type ‘System.Data.Entity.DynamicProxies.Friend_E5C79F4736EB2750392FFC7061B18E9C12F15F9583409603C75C5D1B1F7358D4’. Path ‘Friends1[0].User.Friends’.”,”ExceptionType”:”Newtonsoft.Json.JsonSerializationException”,”StackTrace”:” at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CheckForCircularReference(JsonWriter writer,Object value,JsonProperty property,JsonContract contract,JsonContainerContract containerContract,JsonProperty containerProperty)rn at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer,IWrappedCollection values,JsonArrayContract contract,JsonProperty member,JsonContainerContract collectionContract,JsonProperty containerProperty)rn at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer,JsonContract valueContract,JsonProperty containerProperty)rn at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer,JsonObjectContract contract,JsonProperty containerProperty)rn at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter,Object value)rn at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter,Object value)rn at Newtonsoft.Json.JsonSerializer.Serialize(JsonWriter jsonWriter,Object value)rn at System.Net.Http.Formatting.JsonMediaTypeFormatter.<>c__DisplayClassd.b__c()rn at System.Threading.Tasks.TaskHelpers.RunSynchronously(Action action,CancellationToken token)”}}

解决方法

尝试更改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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读