Json序列化异常
模型之间的关系是:X有许多Y;Y有许多Z:Json序列化异常,json,asp.net-mvc-4,json.net,Json,Asp.net Mvc 4,Json.net,模型之间的关系是:X有许多Y;Y有许多Z: class X { int Id { get; set; } [JsonIgnore] IList<Y> Y { get; set; } } class Y { int Id { get; set; } X x { get; set; } [JsonIgnore] IList<Z> Z { get; set; } } class Z { int Id { ge
class X
{
int Id { get; set; }
[JsonIgnore]
IList<Y> Y { get; set; }
}
class Y
{
int Id { get; set; }
X x { get; set; }
[JsonIgnore]
IList<Z> Z { get; set; }
}
class Z
{
int Id { get; set; }
Y y { get; set; }
}
public class YBinder : DefaultModelBinder
{
readonly IQuizRepository _quizRepository = DependencyResolver.Current.GetService<IQuizRepository>();
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var y = (Y)base.BindModel(controllerContext, bindingContext);
if (problem.Chapter != null)
{
y.X = _quizRepository.getX(y.X.Id);
}
return y;
}
}
public class ZBinder : DefaultModelBinder
{
readonly IQuizRepository _quizRepository = DependencyResolver.Current.GetService<IQuizRepository>();
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var z = (Z)base.BindModel(controllerContext, bindingContext);
if (z.Y != null)
{
z.Y = _quizRepository.getY(z.Y.Id);
}
return z;
}
}
JSON的问题是somwewhere;当我将[JsonIgnore]
放入类Z中进行调试时
然后网格加载时不会出现异常,否则它会给出Newtonsoft.Json.JsonSerializationException
class Z
{
int Id { get; set; }
[JsonIgnore] // this removes exception but then I cant bind y in grid
Y y { get; set; }
}
有人能帮我找出问题出在哪里吗?您的模型中有循环依赖关系,您不能用JSON序列化这样的对象图,因为JSON格式不支持它。您必须以这种方式重新思考您的模型,从而打破循环依赖关系。想一想您需要传递给视图的唯一信息是什么,然后将域模型展平为一个简单的视图模型。最后,将此展开视图模型传递给视图。感谢您的回复,我理解您的简单视图模型观点,可能我可以找到解决方案,但我无法理解循环依赖性在哪里?模型之间的关系是简单的x->y->z,我使用JsonIgnore来确保父级和子级中只有一个类负责序列化数据。如果你有时间,你能给我解释一下这一点吗。
class Z
{
int Id { get; set; }
[JsonIgnore] // this removes exception but then I cant bind y in grid
Y y { get; set; }
}