Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebApi 2和EF 6.1序列化失败_C#_Entity Framework_Asp.net Web Api2_Entity Framework 6.1 - Fatal编程技术网

C# WebApi 2和EF 6.1序列化失败

C# WebApi 2和EF 6.1序列化失败,c#,entity-framework,asp.net-web-api2,entity-framework-6.1,C#,Entity Framework,Asp.net Web Api2,Entity Framework 6.1,我对WebApi2和EF 6.1有问题(代码优先) 我有2个模型(主细节) 但是如果我执行api/Master,我得到的错误消息是: {"Message":"An error has occurred.", "ExceptionMessage":"The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'.", "E

我对WebApi2和EF 6.1有问题(代码优先)

我有2个模型(主细节)

但是如果我执行
api/Master
,我得到的错误消息是:

    {"Message":"An error has occurred.",
"ExceptionMessage":"The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; 
charset=utf-8'.",
"ExceptionType":"System.InvalidOperationException","StackTrace":null,
"InnerException":{
  "Message":"An error has occurred.",
  "ExceptionMessage":"Error getting value from 'Details' on 
 'System.Data.Entity.DynamicProxies.Master_6110B4795BCBF52E3140C9F99EB1E28BF43BA97EB02A532B9C89FD1996CE11E9'.",
"ExceptionType":"Newtonsoft.Json.JsonSerializationException",
"StackTrace":"   
at Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(Object target)\r\n   
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues
(JsonWriter writer, Object value, JsonContainerContract contract, JsonProperty member, JsonProperty property, JsonContract& memberContract, Object& memberValue)\r\n   
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter ...
我正在WebApiConfig.cs中强制使用JSON响应

config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;

// Remove default XML handler
var matches = config.Formatters
                    .Where(f => f.SupportedMediaTypes
                                    .Where(m => m.MediaType.ToString() == "application/xml" ||
                                                m.MediaType.ToString() == "text/xml")
                                    .Count() > 0)
                    .ToList();
foreach (var match in matches)
    config.Formatters.Remove(match);
重要信息:如果我使用EF 6.0(删除索引属性和其他不支持的属性),这很好。所以我很困惑

提前谢谢

附言:我对C#(还有WebApi和EF)真的很陌生


编辑:根据建议,只需通过
IList
更改
IQueryable
,并
返回db.Masters.ToList()
,即可正常工作!但是,如果脚手架以这种方式生成IQueryable,为什么IQueryable会失败呢?为什么IQueryable使用EF 6.0而不是6.1?谢谢

您确定在关系的两侧都需要
ForeignKey
属性吗?不,我尝试了使用和不使用该属性,但出现了相同的错误。(我检查,生成的结构是相同的)如果您
返回db.Masters.ToList()
来强制实现,我更改了签名,这就行了!但是,你知道为什么IQueryable失败了吗??脚手架以这种方式生成,序列化延迟加载的实体似乎是在处理上下文或类似的事情之后完成的。无论如何,我想知道为什么它能与旧版本一起工作,因为这是一个常见的问题和常见的解决方法。
{"Detailss":[{"ID":1,"MasterID":1,"Desc":"test"}],"ID":1,"UserID":1,"TenantID":1}
    {"Message":"An error has occurred.",
"ExceptionMessage":"The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; 
charset=utf-8'.",
"ExceptionType":"System.InvalidOperationException","StackTrace":null,
"InnerException":{
  "Message":"An error has occurred.",
  "ExceptionMessage":"Error getting value from 'Details' on 
 'System.Data.Entity.DynamicProxies.Master_6110B4795BCBF52E3140C9F99EB1E28BF43BA97EB02A532B9C89FD1996CE11E9'.",
"ExceptionType":"Newtonsoft.Json.JsonSerializationException",
"StackTrace":"   
at Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(Object target)\r\n   
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues
(JsonWriter writer, Object value, JsonContainerContract contract, JsonProperty member, JsonProperty property, JsonContract& memberContract, Object& memberValue)\r\n   
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter ...
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;

// Remove default XML handler
var matches = config.Formatters
                    .Where(f => f.SupportedMediaTypes
                                    .Where(m => m.MediaType.ToString() == "application/xml" ||
                                                m.MediaType.ToString() == "text/xml")
                                    .Count() > 0)
                    .ToList();
foreach (var match in matches)
    config.Formatters.Remove(match);