জিনিসগুলি সংক্ষেপে বলতে গেলে এর 4 টি সমাধান রয়েছে:
সমাধান 1: DBContext এর জন্য প্রক্সিক্রিয়েশন বন্ধ করুন এবং শেষ পর্যন্ত এটি পুনরুদ্ধার করুন।
private DBEntities db = new DBEntities();//dbcontext
public ActionResult Index()
{
bool proxyCreation = db.Configuration.ProxyCreationEnabled;
try
{
//set ProxyCreation to false
db.Configuration.ProxyCreationEnabled = false;
var data = db.Products.ToList();
return Json(data, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
Response.StatusCode = (int)HttpStatusCode.BadRequest;
return Json(ex.Message);
}
finally
{
//restore ProxyCreation to its original state
db.Configuration.ProxyCreationEnabled = proxyCreation;
}
}
সমাধান 2: সিরিয়ালাইজার সেটিংসে উপেক্ষা করার জন্য রেফারেন্সলুপ হ্যান্ডলিং সেট করে জসনকন্ট ব্যবহার করুন।
//using using Newtonsoft.Json;
private DBEntities db = new DBEntities();//dbcontext
public ActionResult Index()
{
try
{
var data = db.Products.ToList();
JsonSerializerSettings jss = new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore };
var result = JsonConvert.SerializeObject(data, Formatting.Indented, jss);
return Json(result, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
Response.StatusCode = (int)HttpStatusCode.BadRequest;
return Json(ex.Message);
}
}
দুটি সমাধান অনুসরণ করা একই, তবে একটি মডেল ব্যবহার করা ভাল কারণ এটি শক্ত টাইপযুক্ত।
সমাধান 3: একটি মডেল ফিরিয়ে দিন যার মধ্যে কেবল প্রয়োজনীয় বৈশিষ্ট্য অন্তর্ভুক্ত রয়েছে।
private DBEntities db = new DBEntities();//dbcontext
public class ProductModel
{
public int Product_ID { get; set;}
public string Product_Name { get; set;}
public double Product_Price { get; set;}
}
public ActionResult Index()
{
try
{
var data = db.Products.Select(p => new ProductModel
{
Product_ID = p.Product_ID,
Product_Name = p.Product_Name,
Product_Price = p.Product_Price
}).ToList();
return Json(data, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
Response.StatusCode = (int)HttpStatusCode.BadRequest;
return Json(ex.Message);
}
}
সমাধান 4: একটি নতুন গতিশীল অবজেক্ট ফিরিয়ে দিন যার মধ্যে কেবল প্রয়োজনীয় বৈশিষ্ট্য অন্তর্ভুক্ত রয়েছে।
private DBEntities db = new DBEntities();//dbcontext
public ActionResult Index()
{
try
{
var data = db.Products.Select(p => new
{
Product_ID = p.Product_ID,
Product_Name = p.Product_Name,
Product_Price = p.Product_Price
}).ToList();
return Json(data, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
Response.StatusCode = (int)HttpStatusCode.BadRequest;
return Json(ex.Message);
}
}
ScriptIgnore
অ্যাট্রিবিউটটি ব্যবহার করে একটি সমাধান রয়েছে । stackoverflow.com/questions/1193857/subsonic-3-0-0-2-structs-tt