ذخیره و اتصال داده ها از طریق فایل JSON در ASP.NET
جمعه 2 بهمن 1394همانطور که میدانید json یک فرمت ارسال داده ها بین سرور و مشتری است که به آسانترین و کم حجم ترین شکل ارسال داده ها را انجام میدهد. ما در این مقاله قصد داریم چگونگی ذخیره و اتصال داده ها به دیتابیس با استفاده از فایل JSON ، به جای استفاده از پرس و جو ها (Query) را توضیح دهیم.
JSON پلت فرم مستقل است.گرفتن اطلاعات از پایگاه داده و اتصال آن را به نرم افزار نهایی ok است اما بسط دادن یک اتصال و اتصال برای بازیابی اطلاعات ، بسته به تنظیمات سرور و پردازنده محدود است.
بطور خلاصه json یک فرمت ارسال داده ها بین سرور و مشتری است که به آسانترین و کم حجم ترین شکل این امر را فراهم میکند.
توضیحات
در زیر روند ذخیره داده ها در فایل Json و binding نرم افزار نهایی قرار دارد. در اینجا ما از موارد زیر استفاده کرده ایم:
1. ASP.Net MVC 4
MSSQL 2008 as Database2.
Entity Framework code first approach3.
From nuget added reference Newtonsoft.json and entity framework4.
(با استفاده از nuget ، رفرنسهای Newtonsoft.json و entity framework را به پروژه اضافه میکنیم )
مرحله 1: Visual studio 2013 را باز کرده و روی New Project کلیک میکنیم.
گام 2: بعد در این پنجره Empty و MVC را انتخاب میکنیم.مانند تصویر زیر:
گام 3: پس از این مرحله در پنجره Solution Explorer روی Solution راست کلیک ، و گزینه Add ، پس از آن New Project را انتخاب میکنیم .همانطور که در تصویر زیر میبینید پروزه جدیدی ایجاد میکنیم،
گام 4: بعد از این یک پنجره ظاهر شد،روی Installed کلیک و ویژوال #C، پس از آن Class را انتخاب و روی OK کلیک میکنیم.
گام 5: Class1 را به Instagram در JsonEntity تغییر میدهیم و کد زیر را مینویسیم
public class Instagram { [Key] //using System.ComponentModel.DataAnnotations; public int Id { get; set; } // if we will write InstagramId instead of Id [Key] is not required public string InstagramId { get; set; } public string Text { get; set; } public string MediaSharedeUrl { get; set; } public string UserName { get; set; } public string LinkUrl { get; set; } public string MediaType { get; set; } public DateTime CreateDate { get; set; } public DateTime ModifyDate { get; set; } public string Status { get; set; } }
بعد از این EntityFramework را از Manage NuGet Packages for solution را اضافه میکنیم.
بعد از این یک پوشه جدید با نام Context و داخل آن یک کلاس با نام JsonContext (این کلاس به عمومی) اضافه میکنیم .
مرحله 6: بعد از این کد زیر را به کلاس JSON Context.cs اضافه کنید ،
public class JsonContext : DbContext //using System.Data.Entity; { public DbSet<Instagram> ObjInstagramDatas { get; set; } }
در web.config پروژه Json ، کد زیر را برای ایجاد پایگاه داده و جدول اضافه کنید.
<connectionStrings> <add name="JsonContext" connectionString="Data Source=(local); Initial Catalog=Json; User Id=sa; Password=123" providerName="System.Data.SqlClient"/> </connectionStrings>
توجه: در اینجا JsonContext را ، برای هر کلاس context و Initial Catalog=Json را ،اضافه میکنیم.اگر دیتابیس Json Demo وجود نداشته باشد ،آن را ایجاد خواهد کرد.
solution و dll reference کلاس ،پروژه Json را build کنید. و entity framework code first approach این را تکمیل میکند.
مرحله 7: یک Controller به نام Home برای درک بهتر ایجاد کرده و کد زیر را در آن وارد میکنیم . همچنین Newtonsoft.json از Manage NuGet Packages for solution اضافه میکنیم.
public class HomeController : Controller { // GET: Home public ActionResult Index() { if (!Directory.Exists(Server.MapPath("~/JsonData"))) { Directory.CreateDirectory(Server.MapPath("~/JsonData")); System.IO.File.WriteAllText(Server.MapPath("~/JsonData/InstagramData.json"), null); } var jsonInstagramdata = new StreamReader(Server.MapPath("~/JsonData/InstagramData.json")); var rawJsonData = jsonInstagramdata.ReadToEnd(); jsonInstagramdata.Close(); var dtlData = JsonConvert.DeserializeObject<List<Instagram>>(rawJsonData); //Get List Of all Data Json File if (dtlData != null) { ViewData["InstagramData"] = dtlData.ToList(); } return View(); } public ActionResult ReadInstagramRecord() //This is used to get Instagram records and save data in database. { var count = 0; try { const string hashtag = "ProudToBeIndian"; //getting data from hash tag const string accessToken = "16741082.1b07669.121a338d0cbe4ff6a5e04543158a4f82"; var request = (HttpWebRequest)WebRequest.Create("https://api.instagram.com/v1/tags/" + hashtag + "/media/recent?count=33&access_token=" + accessToken + ""); //Hiting API request.Method = "GET"; using (var response = (HttpWebResponse)request.GetResponse()) //Saving the json response in database { var dataStream = response.GetResponseStream(); var reader = new StreamReader(dataStream); var json = reader.ReadToEnd(); dynamic instagramDataList = JsonConvert.DeserializeObject(json); foreach (var data in instagramDataList.data) { using (var context = new JsonContext()) //Inserting the user details into Db { var instagramData = new Instagram(); string img = data.type == "image" ? data.images.standard_resolution.url : data.videos.standard_resolution.url; instagramData.Text = data.caption.text; instagramData.InstagramId = data.id; instagramData.UserName = "https://www.instagram.com/" + data.user.username; instagramData.CreateDate = DateTime.Now; instagramData.ModifyDate = DateTime.Now; instagramData.Status = "Approved"; instagramData.MediaType = data.type; instagramData.MediaSharedeUrl = img; instagramData.LinkUrl = data.link; var qry = (from s in context.ObjInstagramDatas where s.InstagramId == instagramData.InstagramId select s).FirstOrDefault(); if (qry != null) continue; context.ObjInstagramDatas.Add(instagramData); context.SaveChanges(); count++; } } reader.Close(); if (dataStream != null) dataStream.Close(); } ViewBag.CountData = count; return RedirectToAction("Index"); } catch (Exception ex) { ViewBag.ErrorMessage = "Some exception occured" + ex; return View("Index"); } } public ActionResult UpdateJson() //Getting data from database and save in Json File { using (var context = new JsonContext()) { try { var getInstaData = context.ObjInstagramDatas.Where(x => x.Status == "Approved").ToList(); var selectInstaData = getInstaData.AsEnumerable().Where(x => x.Status == "Approved").Select((obj, index) => new Instagram() { Text = obj.Text, MediaSharedeUrl = obj.MediaSharedeUrl, MediaType = obj.MediaType, Status = obj.Status, CreateDate = obj.CreateDate, ModifyDate = obj.ModifyDate, LinkUrl = obj.LinkUrl, UserName = obj.UserName, Id = index + 1 }); var bindInstaData = selectInstaData.ToList(); var jsonString = JsonConvert.SerializeObject(bindInstaData); if (jsonString != null) { if (!Directory.Exists(Server.MapPath("~/JsonData"))) { Directory.CreateDirectory(Server.MapPath("~/JsonData")); } } System.IO.File.WriteAllText(Server.MapPath("~/JsonData/InstagramData.json"), jsonString); return RedirectToAction("Index"); } catch (Exception) { throw; } } } }
برای طراحی کد زیر را در Index page پوشه View وارد میکنیم.
@using JsonEntity @{ Layout = null; var data = ViewData["InstagramData"]; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Json Demo</title> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.10/css/jquery.dataTables.min.css" /> <script language="JavaScript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script> </head> <body> <div class="col-lg-offset-3 col-md-9"> <h4>@Html.ActionLink("Index", "Index", "Home", null, new { @class = "btn btn-success" }) @Html.ActionLink("Fetch Data", "ReadInstagramRecord", "Home", null, new { @class = "btn btn-primary" }) @Html.ActionLink("Update Json", "UpdateJson", "Home", null, new { @class = "btn btn-primary" })</h4> </div> <div> <table id="example" class="display" cellspacing="0" width="100%"> <thead> <tr> <th>Id</th> <th>Media Shared Url</th> <th>Media Type</th> <th>Text</th> <th>Status</th> </tr> </thead> <tbody> @if (data == null) { <tr> <td> No records to show </td> </tr> } else { foreach (var item in (List<Instagram>)data) { <tr> <td> @item.Id </td> <td> @if (item.MediaSharedeUrl != null) { if (item.MediaType == "image") { <a href="@item.MediaSharedeUrl" target="_blank">View Image</a> } else { <a href="@item.MediaSharedeUrl" target="_blank">View Video</a> } } else { <span>Not Available</span> } @*<img src="@item.MediaSharedeUrl" style="height:50px;width:50px; " class="img-circle" />*@ </td> <td> @item.MediaType </td> <td> @item.Text </td> <td> @item.Status </td> @*<td> <input type="checkbox" class="chcktblInsta" name="chcktblInsta" value="@item.Id" /> </td>*@ </tr> } } </tbody> </table> </div> <script type="text/javascript"> $(document).ready(function () { $('#example').DataTable(); }); </script> <script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.min.js"></script> <script type="text/javascript" src="https://cdn.datatables.net/1.10.10/js/jquery.dataTables.min.js"></script> </body> </html>
- ASP.net
- 3k بازدید
- 4 تشکر