1. L'outil de sérialisation Json open source Net Newtonsoft.Json fournit une solution au problème de référence circulaire de la sérialisation :
Méthode 1 : Spécifiez la configuration de sérialisation Json comme ReferenceLoopHandling.Ignore
Méthode 2 : Spécifiez JsonIgnore pour ignorer l'objet de référence
Exemple 1, résolvez la méthode de référence de sérialisation Json de MVC :
étape 1 : Ajoutez une référence au Newtonsoft.Json package sur le projet, Commande : Insert-Package Newtonsoft.Json
étape 2 : Ajouter une classe au projet, héritant de JsonResult, le code est le suivant :
/// <summary>/// 继承JsonResut,重写序列化方式/// </summary>public class JsonNetResult : JsonResult {public JsonSerializerSettings Settings { get; private set; }public JsonNetResult() { Settings = new JsonSerializerSettings {//这句是解决问题的关键,也就是json.net官方给出的解决配置选项. ReferenceLoopHandling = ReferenceLoopHandling.Ignore }; }public override void ExecuteResult(ControllerContext context) {if (context == null)throw new ArgumentNullException("context");if (this.JsonRequestBehavior == JsonRequestBehavior.DenyGet && string.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))throw new InvalidOperationException("JSON GET is not allowed"); HttpResponseBase response = context.HttpContext.Response; response.ContentType = string.IsNullOrEmpty(this.ContentType) ? "application/json" : this.ContentType;if (this.ContentEncoding != null) response.ContentEncoding = this.ContentEncoding;if (this.Data == null)return;var scriptSerializer = JsonSerializer.Create(this.Settings);using (var sw = new StringWriter()) { scriptSerializer.Serialize(sw, this.Data); response.Write(sw.ToString()); } } }
étape 3 : Ajouter BaseController au projet et réécrire la méthode Json(), le code est le suivant :
public class BaseController : Controller {public StudentContext _Context = new StudentContext();/// <summary>/// 重写,Json方法,使之返回JsonNetResult类型/// </summary>protected override JsonResult Json(object data, string contentType, Encoding contentEncoding, JsonRequestBehavior behavior) {return new JsonNetResult { Data = data, ContentType = contentType, ContentEncoding = contentEncoding, JsonRequestBehavior = behavior }; } }
étape 4. Utilisez-le simplement comme d'habitude
//获取列表public JsonResult GetList() { List<student> list = _Context.students.Where(q => q.sno == "103").ToList();//方法1return Json(list);//方法2//return new JsonNetResult() {// Data=list//}; }</student>
Les résultats obtenus indiquent que cette méthode précise d'ignorer les références circulaires est-elle ignorée après avoir spécifié le cycle. série ? Dans les données json renvoyées ou Il y a des données circulaires
Pour résoudre la méthode de référence circulaire de sérialisation EF Json 2, ajoutez l'annotation de la méthode JsonIgnore sur l'objet associé spécifié
[JsonIgnore]public virtual ICollection<score> scores { get; set; }</score>
Il n'y a aucune donnée de table associée dans les résultats renvoyés
L'article est reproduit à partir de :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!