C# 如何使用json.net正确序列化空数据表

C# 如何使用json.net正确序列化空数据表,c#,.net,asp.net-core,json.net,C#,.net,Asp.net Core,Json.net,我想序列化一个数据表对象,该对象没有行,但有列 现在,Newtonsoft JSON.NET将此类数据表序列化为一个完全空的表,没有列。 但是,我想要列的名称和类型 如何配置JSON.NET以序列化具有列名和列类型的空数据表?假设您有一个数据表dt,则可以使用Linq将列投影到匿名类型(包含列名和类型)的列表中,如下所示: var columns = dt.Columns .Cast<DataColumn>() .Sel

我想序列化一个
数据表
对象,该对象没有,但有列

现在,Newtonsoft JSON.NET将此类数据表序列化为一个完全空的表,没有列。

但是,我想要列的名称和类型


如何配置JSON.NET以序列化具有列名和列类型的空数据表?

假设您有一个数据表
dt
,则可以使用Linq将列投影到匿名类型(包含列名和类型)的列表中,如下所示:

var columns = dt.Columns
                .Cast<DataColumn>()
                .Select(c => new { Name = c.ColumnName, Type = c.DataType.ToString()});
var json = JsonConvert.Serialize(columns);
[
  {
    "Name": "Id",
    "Type": "System.Int32"
  },
  {
    "Name": "Name",
    "Type": "System.String"
  },
  {
    "Name": "Date",
    "Type": "System.DateTime"
  }
]
或者使用
System.Text.Json

var json = JsonSerializer.Serialize(columns);
其中(如果您的表有3列-
Id
Name
Date
)将生成类似以下内容的JSON:

var columns = dt.Columns
                .Cast<DataColumn>()
                .Select(c => new { Name = c.ColumnName, Type = c.DataType.ToString()});
var json = JsonConvert.Serialize(columns);
[
  {
    "Name": "Id",
    "Type": "System.Int32"
  },
  {
    "Name": "Name",
    "Type": "System.String"
  },
  {
    "Name": "Date",
    "Type": "System.DateTime"
  }
]

没有其他方法吗?这是个好主意,所以实际上列被序列化为一个单独的列表。这还可能解决另一个问题,因为在序列化和反序列化期间,所有Int32都转换为Int64。我会试试,稍后再来。