【发布时间】:2020-10-15 00:56:57
【问题描述】:
我编写了下面的代码来从 DataSet 生成 XML,然后返回到相同的 DataSet。但我生成的 DataSet 始终为空。
测试方法是这样的 -
[Test]
public void XmlToDataSetTest()
{
var dataSetExpected = GenerateDataSet();
var xmlString = GetXml(dataSetExpected);
var dataSetActual = GetDataSet(xmlString); //dataSetActual is always empty, no DataTables inside
//Assert
}
private DataSet GenerateDataSet()
{
var dataSet = new DataSet("DataSetSample");
for (int dt = 0; dt < 2; dt++)
{
var dataTable = new DataTable($"Table{dt}");
for (int c = 0; c < 2; c++)
{
dataTable.Columns.Add(new DataColumn($"Column{c}"));
}
for (int c = 0; c < 2; c++)
{
var workRow = dataTable.NewRow();
for (int r = 0; r < 2; r++)
{
workRow[r] = $"Column{c} - Row{r}";
}
dataTable.Rows.Add(workRow);
}
dataSet.Tables.Add(dataTable);
}
return dataSet;
}
public DataSet GetDataSet(string xml)
{
var dataSet = new DataSet();
var xmlSR = new StringReader(xml);
dataSet.ReadXml(xmlSR, XmlReadMode.IgnoreSchema);
return dataSet;
}
public string GetXml(DataSet dataSet)
{
return dataSet.GetXml();
}
我的期望是dataSetActual 应该与dataSetExpected 完全相同。但由于某种原因,dataSetActual 总是空的。我知道这不应该那么棘手。我可能缺少一些非常微不足道的东西。
谁能帮我解决这个问题?
编辑:
我根据@jgw 的建议修改了GetDataSet 以使用WriteXml,但仍然是同样的问题。 dataSetActual 在测试方法中仍然是空白 -
public DataSet GetDataSet(string xml)
{
var dataSet = new DataSet();
var xmlStringWriter = new StringWriter(new StringBuilder(xml));
dataSet.WriteXml(xmlStringWriter, XmlWriteMode.WriteSchema);
return dataSet;
}
【问题讨论】: