我几天来一直在努力解决这个问题,到目前为止我找不到的任何解决方案都没有找到任何乐趣。
该项目使用Entity Framework 6和WebAPI 2构建。 我已将我的WebApiConfig设置更改为
config.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
现在似乎发生了无限循环,抛出了系统内存异常。
我似乎无法找到正确的方法。
我也在WebAPI方法中尝试了这个,仍然是相同的症状。
public async Task<IHttpActionResult> GetCustomer_Title(int id)
{
Customer_Title c = await db.Customer_Title.FindAsync(id);
if (c == null)
{
return NotFound();
}
var json = JsonConvert.SerializeObject(c, new JsonSerializerSettings()
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});
return Ok(json);
}
和我的Customer_Title类
public partial class Customer_Title
{
public Customer_Title()
{
Customer = new HashSet<Customer>();
}
[Key]
public int TitleID { get; set; }
[Required]
[StringLength(100)]
public string TitleDescription { get; set; }
public int InstanceID { get; set; }
[JsonIgnore]
public virtual ICollection<Customer> Customer { get; set; }
public virtual System_Instance System_Instance { get; set; }
}
[JsonIgnore]属性似乎什么也没做。
答案 0 :(得分:0)
您应该使用DTO而不是Entity框架实体, 例如:
class PersonDTO {
public Name {get; set;}
}
var person = context.People.First();
var personDTO = new PersonDTO{
Name = person.Name
}
var json = new JavaScriptSerializer().Serialize(personDTO);