我的問題如下:
//[{"CODE":"B","DESC":"B level"},{"CODE":"C","DESC":"C level"}]
string str = "[{\"CODE\":\"B\",\"DESC\":\"B level\"},{\"CODE\":\"C\",\"DESC\":\"C level\"}]";
object otn = Json2Object(str); //這物件要如何取值?
我有在網路上找到一個方法:
//JSON字串
string Json = "{ 'Table1': [ { 'id': 1, 'item': '這是第1個項目' }, { 'id': 2, 'item': '這是第2個項目' }, { 'id': 3, 'item': '這是第3個項目' }, { 'id': 4, 'item': '這是第4個項目' } ] }";
//將JSON字串轉為DataSet
DataSet dataSet = JsonConvert.DeserializeObject<DataSet>(Json);
//建立DataTable,並塞進dataSet的值
DataTable dataTable = dataSet.Tables["Table1"];
//顯示DataTable的筆數
Response.Write("共"+dataTable.Rows.Count+"筆資料</br>");
//顯示DataTable的筆數
foreach (DataRow row in dataTable.Rows)
{
Response.Write(row["id"] + " - " + row["item"]);
}
細看差別在我的資料沒有 Table1 這一層
請問是否這樣就沒辦法解了?
1、跟據那個json的內容,建立相應的Class,你可以加開一個類別檔來放,或是放在你的CS檔的最下方
class JObj {
public string CODE{get;set;}
public string DESC{get;set;}
}
2、個人喜好用Newtonsoft的JsonConvert(Nuget免費下載使用),因為C#的字串為雙引號,我把你的例子上的json裡的雙引號改為單引號,不然一堆反斜線會看到花路路
string jsonstr = @"[{'CODE':'B','DESC':'B level'},{'CODE':'C','DESC':'C level'}]";
var csObj = JsonConvert.DeserializeObject<JObj>(jsonstr);
3、取值的方法,因為你的例子是陣列,所以要列舉
foreach(var data in csObj){
MessageBox.Show(data.CODE);
}
打完收工
抱歉,請問我這樣寫了
class JObj
{
public string CODE { get; set; }
public string DESC { get; set; }
public static void MainC5()
{
//JSON
string jsonstr = @"[{'CODE':'B','DESC':'B level'},{'CODE':'C','DESC':'C level'}]";
var csObj = JsonConvert.DeserializeObject<JObj>(jsonstr);
foreach (var data in csObj)
{
Console.WriteLine(data.CODE);
}
}
}
有錯誤訊息:
是哪裡不對嗎?
解決了:
var csObj = JsonConvert.DeserializeObject<JObj[]>(jsonstr);
sorry忘了把陣列型別符號[]給加上去了,程式碼在這裡直接寫沒在實機上測試....疏忽...下次改進~