2016-05-27 76 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

相关问题