我正在尝试使用Newtonsoft JsonConverter序列化C#DataTable
代码:
JsonConvert.SerializeObject(dt); //dt is DataTable
Run Code Online (Sandbox Code Playgroud)
我得到的结果是:
[
{
"Name": "Tiger Nixon",
"Position": "System Architect",
"Address": "Edinburgh",
"No": "5421"
},
{
"Name": "Garrett Winters",
"Position": "Accountant",
"Address": "Tokyo",
"No": "8422"
}
]
Run Code Online (Sandbox Code Playgroud)
我想要的结果是:
{
"data": [
[
"Tiger Nixon",
"System Architect",
"Edinburgh",
"5421"
],
[
"Garrett Winters",
"Accountant",
"Tokyo",
"8422"
]
]
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用Newtonsoft自定义输出?我试着写我自己的代码通过序列化数据表foreach上DataTable,但性能是白天和黑夜相比Newtonsoft.
任何帮助将不胜感激
您可以使用以下内容执行此操作JsonConverter:
public class DataTableTo2dArrayConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return typeof(DataTable).IsAssignableFrom(objectType);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var table = (DataTable)value;
var array2d = table.AsEnumerable().Select(row => table.Columns.Cast<DataColumn>().Select(col => row[col]));
serializer.Serialize(writer, new { data = array2d });
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用它像:
var settings = new JsonSerializerSettings();
settings.Converters.Add(new DataTableTo2dArrayConverter());
var json = JsonConvert.SerializeObject(dt, Formatting.Indented, settings);
Run Code Online (Sandbox Code Playgroud)
请注意,我的使用System.Data.DataTableExtensions.AsEnumerable()需要引用System.Data.DataSetExtensions.dll.