2008-09-08 2 views
2

JSON 형식의 문자열을 반환하는 동적 linq 확장 메서드를 만들려고했습니다. System.Linq.Dynamic 및 Newtonsoft.Json을 사용하고 있습니다. Linq.Dynamic이 "cell = new object []"부분을 구문 분석하지 못하게합니다. 아마도 너무 복잡할까요? 어떤 아이디어? :동적 linq : JSON 결과를 생성하는 확장 메서드 만들기

내 주요 방법 : 빠른 응답

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 클래스

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]} 
     //  ] 
     // } 

    } 

} 

답변

1

이 정말 못생긴 및 문자열 교체와 함께 몇 가지 문제가있을 수 있지만, 예상되는 결과를 생성합니다

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

감사합니다. 그러나 필수 출력에는 "셀"배열에 속성 이름이 없습니다 (그 이유는 객체 []를 사용했기 때문입니다).

"cell": [ "FAMIA", "Familia Arquibaldo", ... 대 "세포": { "CustomerID를": "FAMIA", "회사 명", "파밀리아 Arquibaldo"... 결과는 이는 필요 "flexify"라는 JQuery와 그리드와 함께 사용할 수하기위한 것입니다

이 형식의 출력.

관련 문제