使用Newtonsoft的自定义JSON字符串输出 [英] Custom JSON string output using Newtonsoft

查看:36
本文介绍了使用Newtonsoft的自定义JSON字符串输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆