2013-10-24 33 views
-1

我在我的應用程序檢索的DataTable特定行中使用C#

DataTable table = new DataTable(); 

它具有以下格式

ID | Name  | Add | Edit | View | Authorize 
    --------------------------------------------------------------------- 
    10 | User  | true | trues | trues | true 
    11 | Group  | true | trues | trues | true 
    12 | Permission| true | trues | trues | true 

我想從這個數據表通過ID檢索一行創建了一個數據表。

例如,我想與id = 12

也就是說檢索該行,

12 | Permission| true | trues | trues | true 

後,我想只此行轉換爲JSON字符串使用json.net

{["id":"12","name":"Permission","add":true,"edit":true,"authorize":true,"view":true}] 

這可能嗎?請幫助

+2

是的,這是非常有可能的。你有什麼嘗試?你使用什麼web框架? – CodeCaster

回答

2

您可以使用LINQ和Json.NET。 在頂部您的類添加:

using System.Linq; 

在你的代碼,你可以有兩種方式:

// 1. select the row in the table 
// 2. create an anonymous object 
// 3. serialize it 
var json1 = JsonConvert.SerializeObject(table.Select("ID=12") 
    .Select(row => new 
    { 
     id = row["ID"], 
     name = row["Name"], 
     add = row["Add"], 
     edit = row["Edit"], 
     view = row["View"], 
     authorize = row["Authorize"] 
    }).FirstOrDefault()); 

// 1. cast all rows in the table 
// 2. create a collection of anonymous objects 
// 3. select the anonymous object by id 
// 4. serialize it 
var json2 = JsonConvert.SerializeObject(table .Rows 
    .Cast<DataRow>() 
    .Select(row => new 
    { 
     id = row["ID"], 
     name = row["Name"], 
     add = row["Add"], 
     edit = row["Edit"], 
     view = row["View"], 
     authorize = row["Authorize"] 
    }) 
    .FirstOrDefault(row => row.id.ToString() == "12")); 

或者,您也可以使用自己的類。這種選擇不一定需要LINQ:

// 1. select the row 
// 2. create a new TableRow object 
// 3. serialize it 
var filteredRow = table.Select("ID=12"); 
if (filteredRow.Length == 1) 
{ 
    var json3 = JsonConvert.SerializeObject(
     new TableRow(filteredRow[0].ItemArray)); 
} 

簡化TableRow類定義看起來如下所示:

public class TableRow 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public bool add { get; set; } 
    public bool edit { get; set; } 
    public bool view { get; set; } 
    public bool authorize { get; set; } 

    public TableRow(object[] itemArray) 
    { 
     id = Int32.Parse(itemArray[0].ToString()); 
     name = itemArray[1].ToString(); 
     add = bool.Parse(itemArray[2].ToString()); 
     edit = bool.Parse(itemArray[3].ToString()); 
     view = bool.Parse(itemArray[4].ToString()); 
     authorize = bool.Parse(itemArray[5].ToString()); 
    } 
} 
+0

現在,它顯示錯誤「Cast不是System.Data.DataRowCollection的成員」 – folk

0

如何使用的DataTable

DataRow[] dr = table.Select("id = 12"); 

或者Select方法是動態

int rowid = ... //assign some value through code and then 
DataRow[] dr = table.Select("id = " + rowid); 

我不知道JSON的想法,但你可以看看

Convert DataTable to JSON with key per row
http://www.codeproject.com/Tips/624888/Converting-DataTable-to-JSON-Format-in-Csharp-and
C# DataTable to Json?

+0

我可以將此數據行轉換爲json字符串嗎? – folk

+0

@folk:閱讀我更新的答案。 –