2008-09-08 21 views
2

JSON biçiminde bir dize döndüren bir dinamik linq uzantısı yöntemi oluşturmaya çalışıyorum - System.Linq.Dynamic ve Newtonsoft.Json kullanıyorum ve Linq.Dynamic'i "cell = new object []" bölümünü ayrıştırmak için kullanmayın. Belki de çok mu karmaşık? Herhangi bir fikir? :Dinamik linq: JSON sonucu üreten bir uzantı yöntemi oluşturma

Benim ana yöntemi: Hızlı cevap için

static void Main(string[] args) 
{ 
    NorthwindDataContext db = new NorthwindDataContext(); 
    var query = db.Customers; 
    string json = JSonify<Customer> 
        .GetJsonTable(
         query, 
         2, 
         10, 
         "CustomerID" 
         , 
         new string[] 
          { 
           "CustomerID", 
           "CompanyName", 
           "City", 
           "Country", 
           "Orders.Count" 
          }); 
    Console.WriteLine(json); 
} 

JSonify sınıf

public static class JSonify<T> 
{ 
    public static string GetJsonTable(
     this IQueryable<T> query, 
     int pageNumber, 
     int pageSize, 
     string IDColumnName, 
     string[] columnNames) 
    { 
     string selectItems = 
      String.Format(@" 
         new 
         { 
          {{0}} as ID, 
          cell = new object[]{{{1}}} 
         }", 
          IDColumnName, 
          String.Join(",", columnNames)); 

     var items = new 
     { 
      page = pageNumber, 
      total = query.Count(), 
      rows = 
       query 
        .Select(selectItems) 
        .Skip(pageNumber * pageSize) 
        .Take(pageSize) 
     }; 

     return JavaScriptConvert.SerializeObject(items); 
     // Should produce this result: 
     // { 
     // "page":2, 
     // "total":91, 
     // "rows": 
     //  [ 
     //  {"ID":"FAMIA","cell":["FAMIA","Familia Arquibaldo","Sao Paulo","Brazil",7]}, 
     //  {"ID":"FISSA","cell":["FISSA","FISSA Fabrica Inter. Salchichas S.A.","Madrid","Spain",0]}, 
     //  {"ID":"FOLIG","cell":["FOLIG","Folies gourmandes","Lille","France",5]}, 
     //  {"ID":"FOLKO","cell":["FOLKO","Folk och fä HB","Bräcke","Sweden",19]}, 
     //  {"ID":"FRANK","cell":["FRANK","Frankenversand","München","Germany",15]}, 
     //  {"ID":"FRANR","cell":["FRANR","France restauration","Nantes","France",3]}, 
     //  {"ID":"FRANS","cell":["FRANS","Franchi S.p.A.","Torino","Italy",6]}, 
     //  {"ID":"FURIB","cell":["FURIB","Furia Bacalhau e Frutos do Mar","Lisboa","Portugal",8]}, 
     //  {"ID":"GALED","cell":["GALED","Galería del gastrónomo","Barcelona","Spain",5]}, 
     //  {"ID":"GODOS","cell":["GODOS","Godos Cocina Típica","Sevilla","Spain",10]} 
     //  ] 
     // } 

    } 

} 

cevap

1

Bu gerçekten çirkin ve dize değiştirme ile bazı sorunlar olabilir, ancak beklenen sonuçlar üretir:

public static class JSonify 
{ 
    public static string GetJsonTable<T>(
     this IQueryable<T> query, int pageNumber, int pageSize, string IDColumnName, string[] columnNames) 
    { 
     string select = string.Format("new ({0} as ID, \"CELLSTART\" as CELLSTART, {1}, \"CELLEND\" as CELLEND)", IDColumnName, string.Join(",", columnNames)); 
     var items = new 
     { 
      page = pageNumber, 
      total = query.Count(), 
      rows = query.Select(select).Skip((pageNumber - 1) * pageSize).Take(pageSize) 
     }; 
     string json = JavaScriptConvert.SerializeObject(items); 
     json = json.Replace("\"CELLSTART\":\"CELLSTART\",", "\"cell\":["); 
     json = json.Replace(",\"CELLEND\":\"CELLEND\"", "]"); 
     foreach (string column in columnNames) 
     { 
      json = json.Replace("\"" + column + "\":", ""); 
     } 
     return json; 
    } 
} 
0
static void Main(string[] args) 
{ 
    NorthwindDataContext db = new NorthwindDataContext(); 
    var query = db.Customers; 
    string json = query.GetJsonTable<Customer>(2, 10, "CustomerID", new string[] {"CustomerID", "CompanyName", "City", "Country", "Orders.Count" }); 
} 

public static class JSonify 
{ 
    public static string GetJsonTable<T>(
     this IQueryable<T> query, int pageNumber, int pageSize, string IDColumnName, string[] columnNames) 
    { 
     string select = string.Format("new ({0} as ID, new ({1}) as cell)", IDColumnName, string.Join(",",  columnNames)); 
     var items = new 
     { 
      page = pageNumber, 
      total = query.Count(), 
      rows = query.Select(select).Skip((pageNumber - 1) * pageSize).Take(pageSize) 
     }; 
     return JavaScriptConvert.SerializeObject(items); 
    } 
} 
0

teşekkürler. Ancak, gerekli çıktı "hücre" dizisinde özellik adlarına sahip olmadığına dikkat edin (bu yüzden [] nesnesini kullanıyordum []):

"hücre": ["FAMIA", "Familia Arquibaldo", ... genel "hücre": { "Müşteri Kimliği": "FAMIA", "SirketAdi", "Familia Arquibaldo", ... bunun sonucu gerektirir "Flexify" olarak adlandırılan bir JQuery ızgara ile kullanılacak kastedilmektedir

Bu formattaki çıktı.