2016-08-02 17 views
0

私は以下のようにjsonデータをフォーマットする必要がある状況があります。文字列とDatatableからJsonデータを作成する

[WebMethod] 
public static string ConvertDatadttoString(string appName) 
{ 
    var sample = new List<SampleClass> 
        { 
         new SampleClass() 
          { 
           columns = new List<SampleItem>() 
              { 
               new SampleItem() {title = "NAME" }, 
               new SampleItem() {title = "COUNTY" }, 
              }, 
           data = new List<List<string>>() 
              { 
               new List<string> { "John Doe", "Fresno" }, 
               new List<string> { "Billy", "Fresno" }, 
               new List<string> { "Tom", "Kern" }, 
               new List<string> { "King Smith", "Kings" }, 
              } 
          } 
    }; 

    var serializer = new JavaScriptSerializer(); 
    var json = serializer.Serialize(sample); 

    return json; 
} 

public class SampleClass 
{ 
    public IEnumerable<SampleItem> columns { get; set; } 
    public IEnumerable<IEnumerable<string>> data { get; set; } 
} 

public class SampleItem 
{ 
    public string title { get; set; } 
} 

上記のコードは、私のために正しいJSONデータを与えているが、私はそれがすべてnew SampleItem() {title = "NAME" },ニーズの私のsource.Firstからの摂取量のデータがどののStringArrayから移入することができるように、コード内のいくつかの変更を行う必要があります.NET DataTableから移入する必要がnew List<string> { "John Doe", "Fresno" },

string columnNames = "Name,County"; 
string[] arrcolumnNames = columnNames.Split(','); 

と第二のようなものです。どうやってするの。

私は、forループを追加して、文字列配列から値を追加しようとしました:

for(int i = 0; i <= arrcolumnNames.Length; i++) 
{ 
    new SampleItem() { title = arrcolumnNames[i] } 
} 

が、私はエラーを取得しています。

+0

@TheLethalCoder {(int i = 0; i <= arrcolumnNames.Length; i ++){ new SampleItem ) {title = arrcolumnNames [i]} } 'このコンパイルエラーは – Lara

+2

です。「エラーが発生しました」:どのエラーが表示されていますか? –

+1

コードサンプルを再フォーマットしてください。潜在的な読者の不便さだけではなく、それらを追い払う効果があります。コードの問題を書式設定し、不正な形式のコードを投稿すると、投稿に価値がないことを示す信号が送信されます。 –

答えて

1

この

public static string ConvertDatadttoString(string appName = "") 
{ 

    var columnNames = "Name,County"; 
    var employees = CreateEmployeesTable(); 
    var sample = new List<SampleClass> 
    { 
     new SampleClass() 
     { 
      columns = columnNames.Split(',').Select(x=> new SampleItem 
      { 
       title = x 
      }), 
      data = employees.AsEnumerable().Select(row=> new List<string> 
      { 
       row.Field<string>("EmployeeName"), 
       row.Field<string>("Company") 
      }) 
     } 
    }; 

    var serializer = new JavaScriptSerializer(); 
    var json = serializer.Serialize(sample); 

    return json; 
} 

プライベートメソッドCreateEmployeesTable

private DataTable CreateEmployeesTable() 
{ 
    var table = new DataTable() 
    { 
     Columns = { "EmployeeName", "Company" }, 
     TableName = "Employees" 
    }; 
    table.Rows.Add("John Doe", "Fresno"); 
    table.Rows.Add("Billy", "Fresno"); 
    table.Rows.Add("Tom", "Kern"); 
    table.Rows.Add("King Smith", "Kings"); 
    return table; 
} 

更新

DataRowExtensions.Field Methodを試してみては5つのオーバーロードがあります。

整数(インデックス)を受け入れる整数オーバーロード。最初の列を取得する場合は、インデックスは0になります。row.Field<string>(0)

+0

今私は取得しています暗黙のうちに型付きローカル変数は、 'var sample = new List ' – Lara

+0

に複数の宣言子を持つことはできません。修正されていません – naveen

+0

私はあなたに確認してお知らせします。ありがとう – Lara

関連する問題