使用Newtonsoft的自定义JSON字符串输出 [英] Custom JSON string output using Newtonsoft
问题描述
我正在尝试使用Newtonsoft JsonConverter序列化C#DataTable
I'm trying to serialize C# DataTable using Newtonsoft JsonConverter
代码:
JsonConvert.SerializeObject(dt); //dt is DataTable
我得到的结果是:
[
{
"Name": "Tiger Nixon",
"Position": "System Architect",
"Address": "Edinburgh",
"No": "5421"
},
{
"Name": "Garrett Winters",
"Position": "Accountant",
"Address": "Tokyo",
"No": "8422"
}
]
我想要的结果是:
{
"data": [
[
"Tiger Nixon",
"System Architect",
"Edinburgh",
"5421"
],
[
"Garrett Winters",
"Accountant",
"Tokyo",
"8422"
]
]
}
是否可以使用Newtonsoft定制输出?我尝试编写自己的代码以通过在DataTable
上使用foreach
序列化DataTable,但与Newtonsoft相比,性能是昼夜的.
Is it possible to custom the output using Newtonsoft? I tried writing my own code to serialize the DataTable by using foreach
on the DataTable
but the performance is night and day compared to Newtonsoft.
任何帮助将不胜感激
推荐答案
您可以使用以下 JsonConverter
:
You could do it with the following 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 });
}
}
然后像这样使用它:
var settings = new JsonSerializerSettings();
settings.Converters.Add(new DataTableTo2dArrayConverter());
var json = JsonConvert.SerializeObject(dt, Formatting.Indented, settings);
请注意,我对 System.Data.DataSetExtensions.dll
.
Note that my use of System.Data.DataTableExtensions.AsEnumerable()
requires a reference to System.Data.DataSetExtensions.dll
.
这篇关于使用Newtonsoft的自定义JSON字符串输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!