0

我正在创建一个 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 手动创建“平面”对象,是否有任何可靠的解决方法可用?我确定这是一个常见问题?

干杯

4

1 回答 1

0

好的,我设法弄清楚了这一点,但是在我的界面中添加了一个可选的“包含”字符串,然后我将其拆分和分离并应用于查询本身。感谢大家的洞察力!

于 2013-09-05T11:38:26.853 回答