C# 无法序列化数据表。未设置数据表名称

C# 无法序列化数据表。未设置数据表名称,c#,sql,oracle,datatable,C#,Sql,Oracle,Datatable,我需要将所有数据表导出到单个XML文件中,如果有一个巨大的表,我无法同时导出所有行,因为System.OutOfMemoryException。所以我尝试导出N行。但是,如果我在查询中使用分页语法,WriteXml会引发异常 我已经在LINQPad中测试了这两个查询,它们都正常 System.InvalidOperationException:无法序列化数据表。 未设置数据表名称 这里有什么问题,或者我如何解决这个问题?正如异常所说的-表没有设置其TableName属性。所以你只需要设置它 Da

我需要将所有数据表导出到单个XML文件中,如果有一个巨大的表,我无法同时导出所有行,因为System.OutOfMemoryException。所以我尝试导出N行。但是,如果我在查询中使用分页语法,WriteXml会引发异常

我已经在LINQPad中测试了这两个查询,它们都正常

System.InvalidOperationException:无法序列化数据表。 未设置数据表名称


这里有什么问题,或者我如何解决这个问题?

正如异常所说的-表没有设置其TableName属性。所以你只需要设置它

DataTable dataTable = new DataTable { TableName = "MyTableName"};
dataTable.Load(oraReaderTableData);
....
如果使用Newtonsoft将JSON字符串数据反序列化为DataTable,则不会设置TableName属性。我编写了示例代码,并将断点放在dt赋值之后,让您看到什么是dt.TableName。调试结果如下:

因此,如果希望返回DataTable作为web服务方法的结果,则需要在反序列化对象之后分配TableName属性。我将代码更改为:

DataTable dt=JsonConvert.DeserializeObject @[ {col1:'value1',col2:'value2'}, {col1:'value3',col2:'value4'}, {col1:'value5',col2:'value6'}, ]; dt.TableName=表名; 我再次调试它。这是可以由web方法返回的首选数据表


如果在dataTable.LoadOrReaderTableData行中放置断点;是否可以查看数据是否已正确加载到dataTable中?是的,有行。加载读取器后是否尝试为dataTable的TableName属性设置值?添加dataTable.TableName=test;解决了这个问题。
DataTable dataTable = new DataTable { TableName = "MyTableName"};
dataTable.Load(oraReaderTableData);
....