System.Text.Json(从 .NET Core 3.1 开始),为了能够序列化这些类型,您需要为JsonConverter<T>您需要的类型实现自己的类型并在JsonSerializerOptions. 为您要求的特定类型编写一个序列化程序应该相当容易。
如果您不想自己实现,有简便的方法,请参考另一篇文章:JsonException: A possible object cycle was detected which is not supported 检测到可能的对象循环,这是不受支持的-CSDN博客
适用于序列化的示例(省略了反序列化组件)代码如下:
public class DataTableConverter : JsonConverter<DataTable>
 {
     public override DataTable Read(ref Utf8JsonReader reader, Type typeToConvert,
         JsonSerializerOptions options)
     {
         throw new NotImplementedException();
     }
    public override void Write(Utf8JsonWriter writer, DataTable value,
         JsonSerializerOptions options)
     {
         writer.WriteStartArray();
        foreach (DataRow row in value.Rows)
         {
             writer.WriteStartObject();
             foreach (DataColumn column in row.Table.Columns)
             {
                 object columnValue = row[column];
                // If necessary:
                 if (options.IgnoreNullValues)
                 {
                     // Do null checks on the values here and skip writing.
                 }
                writer.WritePropertyName(column.ColumnName);
                 JsonSerializer.Serialize(writer, columnValue, options);
             }
             writer.WriteEndObject();
         }
        writer.WriteEndArray();
     }
 }
public class DataSetConverter : JsonConverter<DataSet>
 {
     public override DataSet Read(ref Utf8JsonReader reader, Type typeToConvert,
         JsonSerializerOptions options)
     {
         throw new NotImplementedException();
     }
    public override void Write(Utf8JsonWriter writer, DataSet value,
         JsonSerializerOptions options)
     {
         writer.WriteStartObject();
         foreach (DataTable table in value.Tables)
         {
             writer.WritePropertyName(table.TableName);
             JsonSerializer.Serialize(writer, table, options);
         }
         writer.WriteEndObject();
     }
 }
private static void DataSet_Serialization_WithSystemTextJson()
 {
     var options = new JsonSerializerOptions()
     {
         Converters = { new DataTableConverter(), new DataSetConverter() }
     };
(DataTable table, DataSet dataSet) = GetDataSetAndTable();
    string jsonDataTable = JsonSerializer.Serialize(table, options);
     // [{"id":0,"item":"item 0"},{"id":1,"item":"item 1"}]
     Console.WriteLine(jsonDataTable);
    string jsonDataSet = JsonSerializer.Serialize(dataSet, options);
     // {"Table1":[{"id":0,"item":"item 0"},{"id":1,"item":"item 1"}]}
     Console.WriteLine(jsonDataSet);
    // Local function to create a sample DataTable and DataSet
     (DataTable, DataSet) GetDataSetAndTable()
     {
         dataSet = new DataSet("dataSet");
        table = new DataTable();
         DataColumn idColumn = new DataColumn("id", typeof(int))
         {
             AutoIncrement = true
         };
DataColumn itemColumn = new DataColumn("item");
        table.Columns.Add(idColumn);
         table.Columns.Add(itemColumn);
dataSet.Tables.Add(table);
        for (int i = 0; i < 2; i++)
         {
             DataRow newRow = table.NewRow();
             newRow["item"] = "item " + i;
             table.Rows.Add(newRow);
         }
dataSet.AcceptChanges();
        return (table, dataSet);
     }
 }
查看微软文档,可能会提供更多指导:
How to write custom converters for JSON serialization - .NET | Microsoft Learn
希望本文对你有帮助。