我正在创建一个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手动创建“平面”对象,是否有可用的可靠解决方法?我确定这是一个常见的问题吗?
干杯
答案 0 :(得分:0)
好的,我设法解决了这个问题,但在我的界面中添加了一个可选的'Includes'字符串,然后我将其拆分并分离并应用于查询本身。感谢所有人的洞察力!