2016-05-27 6 views
0

JObject(NewtonSoft.dll)を使用してDataTableをJSON文字列に変換しようとしました。私の場合、テーブルは異なるデータ型の値を持つことがあります。これらの値を文字列に変換してオブジェクトをシリアライズしたいと思います。JSON.NETを使用してオブジェクトをシリアル化している間にintをStringに変換する

 DataTable tab = new DataTable(); 
     tab.Columns.Add("ID", typeof(int)); 
     tab.Columns.Add("Name"); 

     tab.Rows.Add(1, "Role1"); 
     tab.Rows.Add(2, "Role2"); 

     string strValues = JsonConvert.SerializeObject(tab); 
     --output of strValues 
     -- [{"ID":1,"Name":"Role1"},{"ID":2,"Name":"Role2"}] 

しかし、それはこのようにあるべきである -

[{ "ID": "1"、 "名前": "ROLE1"}、{ "ID": "2"、 "名前":" Role2 "}]

私に解決策を教えてください。

tab.Columns.Add("ID", typeof(string)); 

それとも単に::私のようにそれを保存する目的が表示されていない

tab.Columns.Add("ID"); 

おかげ

答えて

0

は、なぜあなたはちょうどこのような文字列としてID列を保存することはできませんその後、int型と文字列に変換しようとする...

+0

私はサンプルとしてこれを示しました。実際のところ、ado.netを使用してデータベースからデータテーブルを取得しようとしていて、複数のデータ型の列がある可能性があります。私はこのシナリオだけを求めています。 – Suresh

+0

DataTable全体を文字列に変換してからJSONに変換すると分かりますか?サンプルが必要な場合はお知らせください。 – user3378165

3

あなたはNewtonsoft.Json

0123のような.dllをサードパーティを使用することができます
+0

newtonsoftのみを使用しています。私はあなたが私の質問を誤解していたと思います。今私の質問を編集しました。チェックしてください – Suresh

0

Json.Netに同梱されているDataTableConverterは、値の書き出し方法はカスタマイズできません。しかし、整数(または他の値の型)を文字列としてレンダリングする場合は、独自のカスタムDataTableConverterを簡単に行うことができます。ここでは、必要となるコードは次のとおりです。

string strValues = JsonConvert.SerializeObject(tab, new CustomDataTableConverter()); 

フィドル:

class CustomDataTableConverter : JsonConverter 
{ 
    public override bool CanConvert(Type objectType) 
    { 
     return (objectType == typeof(DataTable)); 
    } 

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     DataTable table = (DataTable)value; 
     JArray array = new JArray(); 
     foreach (DataRow row in table.Rows) 
     { 
      JObject obj = new JObject(); 
      foreach (DataColumn col in table.Columns) 
      { 
       object val = row[col]; 
       obj.Add(col.ColumnName, val != null ? val.ToString() : string.Empty); 
      } 
      array.Add(obj); 
     } 
     array.WriteTo(writer); 
    } 

    public override bool CanRead 
    { 
     get { return false; } 
    } 

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
    { 
     throw new NotImplementedException(); 
    } 
} 

はこのように、コンバータを使用しhttps://dotnetfiddle.net/mGMutp

関連する問題