我正在创建一个 Web API 来公开实体框架模型。
在阅读了一些帖子之后,我在 webapi.config 文件中做了一些操作
//Ignore circular references due to the VIRTUAL property on some objects.
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
//Remove XML formatter. We dont need XML, just JSON.
config.Formatters.Remove(config.Formatters.XmlFormatter);
DefaultContractResolver resolver = (DefaultContractResolver)config.Formatters.JsonFormatter.SerializerSettings.ContractResolver;
resolver.IgnoreSerializableAttribute = true;
在我的 Web API 控制器中,我在数据库上下文中禁用了 ProxyCreation。
一般来说,这是我需要做的。然而。我需要返回一个具有如下虚拟 UserAdditionalInfos 属性的 UserProfile 对象。
[Serializable]
public class UserProfile
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int UserId { get; set; }
public virtual List<UserAdditionalInfos> AdditionalDetails { get; set; }
}
如果我尝试进行 API 调用以获取 UserProfile 对象,则会在它尝试延迟加载 UserAdditionalInfos 列表时收到错误消息。我希望这是因为我已经关闭了代理创建。但是如果我重新打开它,我会在 JSON 中返回一个代理编码的字符串,而不是我想要的对象。
没有为我的 API 手动创建“平面”对象,是否有任何可靠的解决方法可用?我确定这是一个常见问题?
干杯