我正在尝试将DataSet
序列化为 XML 文件。
从示例输出中可以看出,我的所有表都有名称,数据集也被命名。数据集命名空间为“”,更改此操作无效。
被捕获的例外是:
无法序列化DataTable。未设置DataTable名称。
正如您在下面非常清楚地看到的,所有表都已命名。
DataSet Name: TestDataSet
Table: TABLE1
Table: TABLE2
Table: TABLE3
Table: TABLE4
Table: TABLE5
无法序列化DataTable。未设置DataTable名称。
以下是我用于序列化数据集的代码:
using (FileStream stream = new FileStream("db.xml", FileMode.Create))
{
dataSet.WriteXml(stream, XmlWriteMode.WriteSchema);
stream.Close();
}
如果XmlWriteMode
为WriteSchema
,则创建xml文件并使用该模式填充,仍会抛出异常。如果XmlWriteMode
为IgnoreSchema
并且创建了空文件并且抛出了异常。
是什么导致了这个问题?我在这里和网上的其他地方搜集过大量的帖子,每个人都说“设置表名”。我做到了这一点,但没有任何区别。
答案 0 :(得分:1)
根据评论,问题是由于数据集中的某些表没有给出名称。它可能是次要表(Table1,Table2等中的表元素)。
解决方案可以通过数据集中的所有对象迭代,如果type为DataTable,则设置通用名称。
答案 1 :(得分:0)
这是我使用的解决方案,它的工作原理。 可能不是最有效的,但XML现在已正确序列化。
private void FixTables(DataTable table)
{
foreach (DataRow row in table.Rows)
{
foreach (DataColumn column in table.Columns)
{
var columnName = column.ColumnName;
if (column.DataType == typeof(DataTable) && row[columnName] != DBNull.Value)
{
DataTable innerTable = (DataTable)row[columnName];
innerTable.TableName = columnName;
}
}
}
}