1

我完全不知道可能导致这种情况的原因。

我有一个 ASP.Net MVC 4 RC 应用程序和一组 Web API 控制器。我正在尝试返回一个包含 IList 中的一组子对象的对象。每当我请求该对象时,我都会在浏览器上返回 500 错误,而调试器中没有抛出明显的异常。我尝试在 global.asax 中放置一个 Application_Error 处理程序,也没有发现任何错误。

无论 List 是实际的数据库关系还是只是硬编码的字符串列表都没有关系,无论哪种情况,请求都会失败。如果我将列表设置为空,则请求成功。

如果我删除列表,则请求成功,并且我得到对象的 XML(或 JSON)表示。

我也试过这条线 -

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

捕获实际的异常并且仍然​​没有得到任何回报。

这是当前对象

public class Authority : IEntity
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string Address1 { get; set; }
    public virtual string Address2 { get; set; }
    public virtual string City { get; set; }
    public virtual string County { get; set; }
    public virtual string State { get; set; }
    public virtual string ContactPostalCode { get; set; }

    //public virtual IList<PostalCode> PostalCodes { get; set; }
    public virtual IList<string> RandomTrash { get; set; }

    public VPA()
    {
        //PostalCodes = new List<PostalCode>();
        RandomTrash = new List<string> {"foo"};
    }
}

注意注释掉的 PostalCodes 集合——这是一个真正的多对多数据库关系。我将其注释掉并用虚拟的“RandomTrash”集合替换它,失败似乎是一样的。

我觉得这是一个序列化失败,但我不知道如何避免它。如果有帮助,我将使用 NHibernate 作为 ORM。

有人见过这个吗?

4

1 回答 1

1

回答我自己的问题,以防有人再次遇到这个问题。

它最终在循环中跟随网格进行序列化。为了解决这个问题,我在其中一个模型中的每个循环引用中添加了 2 个属性。

[IgnoreDataMember] 用于 XML 序列化器 [JsonIgnore] 用于 JSON.Net 的序列化器。

我在 IList 属性上添加了 PostalCode 类。

可能有更好的解决方案。这个的缺点是它使我的 API 偏向一边。我可以请求一个授权并获取它的所有邮政编码,但我不能请求一个邮政编码并获取它的所有授权。

于 2012-07-10T00:47:31.463 回答