2010-06-05 13 views
25

json.net का उपयोग कर डेटाटेबल से जेसन को कैसे परिवर्तित करें? कोई भी सुझाव ... मैंने जरूरी बाइनरी डाउनलोड की है ... जेएसन के लिए मेरे डेटाटेबल के रूपांतरण को प्राप्त करने के लिए मुझे किस वर्ग का उपयोग करना चाहिए? इस प्रकार अब तक मेरी datatable पास करके json स्ट्रिंग प्राप्त करने के लिए इस विधि का इस्तेमाल किया ...json.net का उपयोग कर डेटाटेबल से जेसन स्ट्रिंग को कैसे परिवर्तित करें?

public string GetJSONString(DataTable table) 
    { 
     StringBuilder headStrBuilder = new StringBuilder(table.Columns.Count * 5); //pre-allocate some space, default is 16 bytes 
     for (int i = 0; i < table.Columns.Count; i++) 
     { 
      headStrBuilder.AppendFormat("\"{0}\" : \"{0}{1}¾\",", table.Columns[i].Caption, i); 
     } 
     headStrBuilder.Remove(headStrBuilder.Length - 1, 1); // trim away last , 

     StringBuilder sb = new StringBuilder(table.Rows.Count * 5); //pre-allocate some space 
     sb.Append("{\""); 
     sb.Append(table.TableName); 
     sb.Append("\" : ["); 
     for (int i = 0; i < table.Rows.Count; i++) 
     { 
      string tempStr = headStrBuilder.ToString(); 
      sb.Append("{"); 
      for (int j = 0; j < table.Columns.Count; j++) 
      { 
       table.Rows[i][j] = table.Rows[i][j].ToString().Replace("'", ""); 
       tempStr = tempStr.Replace(table.Columns[j] + j.ToString() + "¾", table.Rows[i][j].ToString()); 
      } 
      sb.Append(tempStr + "},"); 
     } 
     sb.Remove(sb.Length - 1, 1); // trim last , 
     sb.Append("]}"); 
     return sb.ToString(); 
    } 

अब मैं json.net का उपयोग कर के बारे में सोचा, लेकिन पता है न, जहां शुरू करने के लिए ....

+0

http://stackoverflow.com/questions/451460/datatable-to-json – Oblio

+0

यहाँ JSON को datatable परिवर्तित करने के लिए कदम ट्यूटोरियल द्वारा कदम है http://codepedia.info/convert-datatable-to-json- इन-एएसपी-नेट-सी-तेज/ –

उत्तर

56
string json = JsonConvert.SerializeObject(table, Formatting.Indented); 

संपादित करें: आपको निश्चित रूप से इंडेंट स्वरूपण की आवश्यकता नहीं है, लेकिन यह इसे अच्छा और पठनीय बनाता है।

+0

मैं परिणामस्वरूप जेसन को JQuery के साथ कैसे पुन: सक्रिय करूं? – Pascal

+8

@ पास्कल जो एक पूरे प्रश्न की तरह लगता है ... – FastTrack

+0

क्या XML पदानुक्रमित को डेटाटेबल में कनवर्ट करने का कोई तरीका है, इसे फ़्लैट करना? – raffian

6
शायद

यह

मूल संस्करण में मदद कर सकता

public static class DataTableToJson 
{ 
    public static JArray ToJson(this System.Data.DataTable source) 
    { 
     JArray result = new JArray(); 
     JObject row; 
     foreach (System.Data.DataRow dr in source.Rows) 
     { 
      row = new JObject(); 
      foreach (System.Data.DataColumn col in source.Columns) 
      { 
       row.Add(col.ColumnName.Trim(), JToken.FromObject(dr[col])); 
      } 
      result.Add(row); 
     } 
     return result; 
    } 
} 

संपादित संस्करण

वहाँ एक मध्यवर्ती कदम है क्योंकि मैं एक शब्दकोश

public static IEnumerable<Dictionary<string, object>> ToDictionary(this DataTable table) 
{ 
    string[] columns = table.Columns.Cast<DataColumn>().Select(c=>c.ColumnName).ToArray(); 
    IEnumerable<Dictionary<string, object>> result = table.Rows.Cast<DataRow>() 
      .Select(dr => columns.ToDictionary(c => c, c=> dr[c])); 
    return result; 
} 
है करने के लिए आवश्यक

आप JsonConverter.SerializeObject(result);, या जेसन स्ट्रिंग प्राप्त करने के लिए एक और जेसन सीरिएलाइज़र जोड़ सकते हैं।

यह @Hasan जावेद के समान है पोस्ट

0

चेक यह।

private static string DataTableToJson(DataTable dataTable) 
    { 
     JavaScriptSerializer serializer = new JavaScriptSerializer(); 
     var rows = (from DataRow d in dataTable.Rows 
      select dataTable.Columns.Cast<DataColumn>().ToDictionary(col => col.ColumnName, col => d[col])).ToList(); 

     rows.AddRange(from DataRow d in dataTable.Rows 
      select dataTable.Columns.Cast<DataColumn>().ToDictionary(col => col.ColumnName, col => d[col])); 
     return serializer.Serialize(rows); 
    } 
संबंधित मुद्दे