What is the best way to generate json from c #

I try to imitate an example where they use hard-coded JSON

{ "page": 1, "total": 1, "records": 2, "rows": [ {"id": 1, "cell": ["1", "Super Item", "300", 0, null, false, false]}, {"id": 2, "cell": ["2", "Item 1", "100", 1, 1, false, false]}, {"id": 3, "cell": ["3", "Sub Item 1", "50", 2, 2, true, true]}, {"id": 4, "cell": ["4", "Sub Item 2", "25", 2, 2, false, false]}, {"id": 5, "cell": ["5", "Sub-sub Item 1", "25", 3, 4, true, true]}, {"id": 6, "cell": ["6", "Sub Item 3", "25", 2, 2, true, true]}, {"id": 7, "cell": ["7", "Item 2", "200", 1, 1, false, false]}, {"id": 8, "cell": ["8", "Sub Item 1", "100", 2, 7, false, false]}, {"id": 9, "cell": ["9", "Sub-sub Item 1", "50", 3, 8, true, true]}, {"id": 10, "cell": ["10", "Sub-sub Item 2", "50", 3, 8, true, true]}, {"id": 11, "cell": ["11", "Sub Item 2", "100", 2, 7, true, true]} ] } 

but I need to generate this from C #. Are there any suggestions on the best way to create this above in C #?

+4
source share
4 answers

The Controller class has a Json method that serializes objects as JSON, so in your action method, you simply create an object and call the method:

 public ActionResult GetData() { return Json( new { page = 1, total = 1, records = 2, rows = new[] { new { id = 1, cell = new object[] { "1", "Super Item", "300", 0, null, false, false } }, new { id = 2, cell = new object[] { "2", "Item 1", "100", 1, 1, false, false } }, new { id = 3, cell = new object[] { "3", "Sub Item 1", "50", 2, 2, true, true } }, new { id = 4, cell = new object[] { "4", "Sub Item 2", "25", 2, 2, false, false } }, new { id = 5, cell = new object[] { "5", "Sub-sub Item 1", "25", 3, 4, true, true } }, new { id = 6, cell = new object[] { "6", "Sub Item 3", "25", 2, 2, true, true } }, new { id = 7, cell = new object[] { "7", "Item 2", "200", 1, 1, false, false } }, new { id = 8, cell = new object[] { "8", "Sub Item 1", "100", 2, 7, false, false } }, new { id = 9, cell = new object[] { "9", "Sub-sub Item 1", "50", 3, 8, true, true } }, new { id = 10, cell = new object[] { "10", "Sub-sub Item 2", "50", 3, 8, true, true } }, new { id = 11, cell = new object[] { "11", "Sub Item 2", "100", 2, 7, true, true } } } } ); } 
+11
source

There is a class built into .Net 2+ called JavaScriptSerializer that creates a structured JSON string based on a .Net typed class.

Using a serializer, you can simply create a class with properties and collections to represent JSON data. Create an instance of this code on the server side .Net, and then respond using the serializer to create the correct JSON string response.

Here's an example of converting an instance of the Person class to a serialized JSON string;

 JavaScriptSerializer js = new JavaScriptSerializer(); Person p1 = new Person(); p1.firstName = "Brian"; p1.lastName = "Scott"; p1.department = "Microsoft"; p1.address.addressline1 = "Microsoft"; p1.address.addressline2 = ""; p1.address.city = "Redmond"; p1.address.state = "Seattle"; p1.address.country = "America"; p1.address.pin = 560028; p1.technologies = new string[] { "IIS", "ASP.NET", "JavaScript", "AJAX" }; string strJSON = js.Serialize(p1); 

This will result in a valid JSON string

 {"firstName":"Brian","lastName":"Scott","department":"Microsoft","address":{"addressline1":"Microsoft","addressline2":"","city":"Redmond","state":"Seattle","country":"America","pin":560028},"technologies":["IIS","ASP.NET","JavaScript","AJAX"]} 

If you intend to use a web service to receive a JSON response on the client side, you can mark your method as:

 [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public string GetPersonJSON() { JavaScriptSerializer js = new JavaScriptSerializer(); Person p1 = new Person(); p1.firstName = "Brian"; p1.lastName = "Scott"; p1.department = "Microsoft"; p1.address.addressline1 = "Microsoft"; p1.address.addressline2 = ""; p1.address.city = "Redmond"; p1.address.state = "Seattle"; p1.address.country = "America"; p1.address.pin = 560028; p1.technologies = new string[] { "IIS", "ASP.NET", "JavaScript", "AJAX" }; return js.Serialize(p1); } 
+4
source

Apparently you are trying to populate jqGrid and are using ASP.NET MVC. If you have defined a class for these values:

 ["1", "Super Item", "300", 0, null, false, false] 

You can save all items in myCollection
you can do something like this:

 var ReturnData = new { total = totalPages, page = page, records = totalRecords, rows = myCollection.Select(r => new { id = r.Id.ToString(), cell = new String[] { r.Field1, r.Field2, r.Field3, r.Field4 } }) }; return (Json(ReturnData, JsonRequestBehavior.DenyGet)); 
+1
source
 class Row { public int id {get;set;} public object[] cell {get;set;} } class Data { public int page {get;set;} public int total {get;set;} public int records {get;set;} public Row[] rows {get;set;} } var myData = new Data(){ .... }; var json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(myData); 
0
source

All Articles