2015-07-13 61 views
3

我有一個DataTable 4列。 (ID,TestName,TestResult,IsValidRequest)。我想將TestName & Testresult轉換成json如何使用C#將DataTable值轉換爲json?

enter image description here

string json = Newtonsoft.Json.JsonConvert.SerializeObject(dt); 

當前JSON變量 'JSON':

[ 
    { 
     "TestID":1, 
     "TestName":"wifi_result", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":7, 
     "TestName":"mic_result", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":8, 
     "TestName":"video_result", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":12, 
     "TestName":"touch_result", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":14, 
     "TestName":"proximity_result", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":15, 
     "TestName":"vibrator_result", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":20, 
     "TestName":"power_key", 
     "TestResult":"2", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":21, 
     "TestName":"accelerometer", 
     "TestResult":"0", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":22, 
     "TestName":"earphone", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":11, 
     "TestName":"memory_result", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":29, 
     "TestName":"memory_internalSD", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":30, 
     "TestName":"memory_internalSDSize", 
     "TestResult":"25.0GB", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":31, 
     "TestName":"memory_externalSD", 
     "TestResult":"0", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":32, 
     "TestName":"memory_externalSDSize", 
     "TestResult":"", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":33, 
     "TestName":"memory_internalflash", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":34, 
     "TestName":"memory_internalflashSize", 
     "TestResult":"2.0GB", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":35, 
     "TestName":"memory_ram", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":36, 
     "TestName":"memory_ramsize", 
     "TestResult":"2.0GB", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":13, 
     "TestName":"lcd_result", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":28, 
     "TestName":"lcd_broken", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":37, 
     "TestName":"key_result", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":16, 
     "TestName":"vol_key_up", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":17, 
     "TestName":"vol_key_down", 
     "TestResult":"0", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":18, 
     "TestName":"menu_key", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":10, 
     "TestName":"headset_result", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":38, 
     "TestName":"headset_leftearphone", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":39, 
     "TestName":"headset_rightearphone", 
     "TestResult":"0", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":27, 
     "TestName":"camera_result", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":40, 
     "TestName":"camera_cameracount", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":5, 
     "TestName":"camera_frontcam", 
     "TestResult":"0", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":6, 
     "TestName":"camera_backcam", 
     "TestResult":"0", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":2, 
     "TestName":"battery_result", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":45, 
     "TestName":"battery_type", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":41, 
     "TestName":"battery_level", 
     "TestResult":"83", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":42, 
     "TestName":"battery_status", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":43, 
     "TestName":"battery_voltage", 
     "TestResult":"4204", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":44, 
     "TestName":"battery_temperature", 
     "TestResult":"310", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":3, 
     "TestName":"battery_accharging", 
     "TestResult":"0", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":4, 
     "TestName":"battery_usbcharging", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":9, 
     "TestName":"audio_result", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":19, 
     "TestName":"home_key", 
     "TestResult":"1", 
     "IsValidRequest":1 
    }, 
    { 
     "TestID":46, 
     "TestName":"back_key", 
     "TestResult":"1", 
     "IsValidRequest":1 
    } 
] 

必需的JSON:

{ 
    "wifi_result":"1", 
    "mic_result":"1", 
    "video_result":"1", 
    "touch_result":"1", 
    "proximity_result":"1", 
    "vibrator_result":"1", 
    "power_key":"2", 
    "accelerometer":"0", 
    "earphone":"1", 
    "memory_result":"1", 
    "memory_internalSD":"1", 
    "memory_internalSDSize":"25.0GB", 
    "memory_externalSD":"0", 
    "memory_externalSDSize":"", 
    "memory_internalflash":"1", 
    "memory_internalflashSize":"2.0GB", 
    "memory_ram":"1", 
    "memory_ramsize":"2.0GB", 
    "lcd_result":"1", 
    "lcd_broken":"1", 
    "key_result":"1", 
    "vol_key_up":"1", 
    "vol_key_down":"0", 
    "menu_key":"1", 
    "headset_result":"1", 
    "headset_leftearphone":"1", 
    "headset_rightearphone":"0", 
    "camera_result":"1", 
    "camera_cameracount":"1", 
    "camera_frontcam":"0", 
    "camera_backcam":"0", 
    "battery_result":"1", 
    "battery_type":"1", 
    "battery_level":"83", 
    "battery_status":"1", 
    "battery_voltage":"4204", 
    "battery_temperature":"310", 
    "battery_accharging":"0", 
    "battery_usbcharging":"1", 
    "audio_result":"1", 
    "home_key":"1", 
    "back_key":"1" 
} 

請提出任何解決辦法嗎?

+0

您應該重新解釋這個問題--Json.NET已經序列化DataTable,但實際上您想在序列化之前將數據錶轉換爲其他內容。本質上,你*旋轉*數據表 –

回答

2

首先將DataTable轉換爲字典,然後序列化爲json。

Dictionary<string, string> dict = 
    dt.AsEnumerable() 
    .ToDictionary<DataRow, string, string>(row => row.Field<string>(1), 
              row => row.Field<string>(2)); 

string json = Newtonsoft.Json.JsonConvert.SerializeObject(dict); 
+0

謝謝@ Bsa0它工作正常! :) –

0

嘗試:

 Dictionary<string, object> data = new Dictionary<string, object>(); 
     for (int i= 0; i < dt.Rows.Count; ++i) 
      data.Add(dt.Rows[i]["TestName"].ToString(), dt.Rows[i]["TestResult"]); 
     string json = Newtonsoft.Json.JsonConvert.SerializeObject(data); 
1
Dictionary<string, string> tests = new Dictionary<string, string>(); 

foreach (DataRow row in dt.Rows) 
{ 
    var testName = (string)row["TestName"]; 
    var testResult = (string)row["TestResult"]; 

    if (!tests.ContainsKey(testName)) 
     tests.Add(testName, testResult); 
} 

string json = Newtonsoft.Json.JsonConvert.SerializeObject(tests); 

你會把相關的值在字典中,當密鑰是新的「屬性」和值在JSON輸出的期望值。在序列化時,JSON鍵和值將從字典鍵值對中獲取。

ContainsKey檢查很重要,因爲您沒有驗證以確保每個測試只出現一次。如果創建字典時多個單個記錄具有相同的測試,那麼它將拋出ArgumentException