2016-05-27 72 views
0

我試圖使用JObject(NewtonSoft.dll)將DataTable轉換爲JSON字符串。在我的情況下,表格可能具有不同數據類型的值。我想在序列化對象時將這些值轉換爲字符串。使用JSON.NET序列化對象時Int轉換爲字符串

 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「}]

請給我解決方案。由於

回答

0

爲什麼你就不能ID列保存爲字符串,像這樣:

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

或者乾脆:

tab.Columns.Add("ID"); 

我沒有看到它保存爲目的詮釋,然後嘗試將其轉換爲字符串...

+0

我只是表明這是樣品。實際上,我將使用ado.net從數據庫中獲取數據表,它可能有多個數據類型列。我只問這個場景。 – Suresh

+0

我明白了,將整個DataTable轉換爲字符串,然後將其轉換爲JSON,會對您有所幫助嗎?讓我知道你是否需要樣品。 – user3378165

3

您可以使用第三方的.dll喜歡Newtonsoft.Json

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

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

// Serialize to JSON string 
TextWriter output = new TextWriter(); 
JsonTextWriter writer = new JsonTextWriter(output); 
writer.Formatting = JsonFormatting; 
JsonSerializer serializer = JsonSerializer.Create(JsonSerializerSettings); 
serializer.Serialize(writer, tab); 
writer.Flush(); 
+0

我只使用newtonsoft。我想你誤解了我的問題。我現在編輯了我的問題。請檢查 – Suresh

0

與Json.Net一起提供的DataTableConverter不能通過如何寫出其值來定製。但是,如果您希望將整數(或任何其他值類型)呈現爲字符串,則可以輕鬆地使您自己的自定義DataTableConverter執行您想要的操作。下面是你需要的代碼:

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(); 
    } 
} 

使用轉換器這樣的:

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

小提琴:https://dotnetfiddle.net/mGMutp

相關問題