2012-02-17 3 views
3
public ActionResult About() 
    { 
     List<Stores> listStores = new List<Stores>(); 
     listStores = this.GetResults("param"); 
     return Json(listStores, "Stores", JsonRequestBehavior.AllowGet); 
    } 

Используя приведенный выше код я могу получить результат нижеПовторные данные JSon из MVC контроллер

[{"id":"1","name":"Store1","cust_name":"custname1","telephone":"1233455555","email":"[email protected]","geo":{"latitude":"12.9876","longitude":"122.376237"}}, 

{"id":"2","name":"Store2","cust_name":"custname2","telephone":"1556454","email":"[email protected]","geo":{"latitude":"12.9876","longitude":"122.376237"}}, 

Как бы я смог получить результат в формате ниже?

{ 

"stores" : [ 
{"id":"1","name":"Store1","cust_name":"custname1","telephone":"1233455555","email":"[email protected]", 
"geo":{"latitude":"12.9876","longitude":"122.376237"}}, 

{"id":"2","name":"Store2","cust_name":"custname2","telephone":"1556454","email":"[email protected]","geo":{"latitude":"12.9876","longitude":"122.376237"}} ] 
} 

Я хотел бы иметь stores в начале данных.

Пожалуйста, помогите мне в этом.

ответ

5

Вам нужно будет создать объект, который содержит магазины в пределах собственности названы магазины:

public ActionResult About() 
{ 
    var result = new { stores = this.GetResults("param") }; 
    return Json(result, "Stores", JsonRequestBehavior.AllowGet); 
} 

я использовал анонимный тип для простоты здесь, если этот тип результата должны были в нескольких местах вы можете подумайте о создании для него «надлежащего» класса.

+0

Как я сделал LinQ .. .учиться научиться вводить быстрее :) – Tr1stan

0
public class StoresViewModel{ 
    public List<Stores> stores {get;set;} 
} 


public ActionResult About() 
{ 
     List<Stores> listStores = new List<Stores>(); 
     listStores = this.GetResults("param"); 
     StoresViewModelmodel = new StoresViewModel(){ 
      stores = listStores; 
     } 
     return Json(model, JsonRequestBehavior.AllowGet); 
} 
1

JavaScriptSerializer можно найти из имен System.Web.Script.Serialization

var ser = new JavaScriptSerializer(); 
var jsonStores = ser.Serialize(stores); 

return Json(new { stores: jsonStores }, "Stores", JsonRequestBehavior.AllowGet); 
1

если вы хотите отправить объект в стороне клиента в формате Json как Data-таблицы, список, словарь и т.д., то нужно переопределить JsonResult и ExecuteResult

другой формат разумного использования Linq возвращать данные как

с помощью Json.NET (необходимо необходимо использовать переопределения JsonResult и ExecuteResult)

DataTable dt = new DataTable();//some data in table 
    return json("data",JsonConvert.SerializeObject(dt)) 

другой вариант с использованием

var Qry = (from d in dt.AsEnumerable() 
           select new 
           { 
            value = d.Field<int>("appSearchID"), 
            text = d.Field<string>("appSaveSearchName"), 
            type = d.Field<int>("appSearchTypeStatus") 
           }); 
        return json("Data", Qry); 

методы переопределения

protected override JsonResult Json(object data, string contentType, Encoding contentEncoding, JsonRequestBehavior behavior) 
     { 
      try 
      { 
        return new JsonNetResult 
        { 
         Data = data, 
         ContentType = contentType, 
         ContentEncoding = contentEncoding, 
         JsonRequestBehavior = behavior, 
         MaxJsonLength = int.MaxValue 
        }; 

      } 
      catch (Exception) 
      { 
       throw; 
      } 
     } 

    public class JsonNetResult : JsonResult 
     { 
      public override void ExecuteResult(ControllerContext context) 
      { 
       try 
       { 
       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; 
        using (StringWriter sw = new StringWriter()) 
        { 
         response.Write(this.Data); 
        } 
       } 
       catch (Exception) 
       { 
        throw; 
       } 
      } 
     } 
+0

Хотя ваш ответ может исправить эту проблему, попробуйте объяснить «ПОЧЕМУ» он исправляет проблему. Укажите некоторые вещи, которые вы изменили/исправили, чтобы заставить его работать. Это поможет OP «понять», почему ваш ответ устраняет его проблему. – Mathlight

Смежные вопросы