相关疑难解决方法(0)

JSON.NET错误检测到类型的自引用循环

我试图序列化从实体数据模型.edmx自动生成的POCO类,当我使用时

JsonConvert.SerializeObject 
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

错误发生类型System.data.entity检测到的自引用循环.

我该如何解决这个问题?

serialization json json.net

458
推荐指数
9
解决办法
27万
查看次数

Json.Net中的PreserveReferencesHandling和ReferenceLoopHandling有什么区别?

我正在查看一个具有以下编码的WebAPI应用程序示例:

json.SerializerSettings.PreserveReferencesHandling 
   = Newtonsoft.Json.PreserveReferencesHandling.Objects;
Run Code Online (Sandbox Code Playgroud)

和另一个有这个编码:

json.SerializerSettings.ReferenceLoopHandling 
   = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
Run Code Online (Sandbox Code Playgroud)

既没有解释为什么选择每一个.我是WebAPI的新手,所以有人可以通过简单的方式向我解释这些差异是什么以及为什么我可能需要使用一个而不是另一个.

c# asp.net json json.net asp.net-web-api

59
推荐指数
1
解决办法
2万
查看次数

将System.ComponentModel.DataAnnotations与Entity Framework 4.0一起使用

我正在使用MVC3,并使用Entity Framework 4.0实体作为我的模型.到目前为止,就使用它作为模型而言,一切都很有效(所有的crud操作/页面生成开箱即用).我想知道,你如何获得与手动生成模型时相同的强大标签和验证信息?

这是我的意思的一个例子.这是一个由MVC3示例项目生成的类:

public class LogOnModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

通过上面的示例,您可以指定在字段的标签中显示的内容(显示)以及要使用的字段类型(密码).但是,当我尝试使用实体框架并将其推送到下面的视图时,我看到自动生成的标签只是字段名称,而不是我希望用户看到/必须阅读的内容:

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Person</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.FirstName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.FirstName)
            @Html.ValidationMessageFor(model => model.FirstName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.MiddleName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.MiddleName)
            @Html.ValidationMessageFor(model => model.MiddleName) …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc entity-framework-4 c#-4.0 asp.net-mvc-3

51
推荐指数
1
解决办法
2万
查看次数

获取JSON序列化实体框架自引用循环错误,即使在使用显式包含时ProxyCreation为false之后也是如此

JSON序列化(ASP.Net Web API)由于自引用循环而失败(这是一个常见问题,原因:被请求的实体延迟加载子实体,并且每个子实体都有父实体的后引用).

我找到了解决办法,但对我没有帮助:

  1. 使用[JsonIgnore]忽略导航属性: 此解决方案有效,但不适用于我的情况.例如:要获取客户信息及其订单,我会在Order类中快速添加[JsonIgnore]到Customer属性,但是当我想获得订单信息以及客户详细信息时,因为客户属性上有[JsonIgnore] ,它不包括客户详细信息.
  2. 更改JSON.Net Serializer设置以保留引用:无法保留,因为我不需要循环引用数据.
  3. 在数据上下文中禁用代理创建并使用显式加载(这应该理想地解决问题):禁用代理创建会停止Lazy Loading并返回数据而不会出现错误,但是当我明确包含子实体时,我再次得到意外的自引用循环错误!该错误位于父实体的后引用级别.

任何经验都沿着同样的路线/建议?

entity-framework lazy-loading json.net asp.net-mvc-4 asp.net-web-api

5
推荐指数
1
解决办法
4913
查看次数