System.Author
Windows 属性是一个多值字符串。 Windows 搜索将此值作为 DataColumn 中的字符串数组返回。 (该列的数据类型是 string[]
或 String()
。)当我调用 WriteXML
时结果数据表上的方法,我得到以下 InvalidOperationException
异常(exception)。
有没有办法指定数据表的 xml-serializer 以用于特定列或特定数据类型?
基本上,我该如何制作 WriteXML
使用这个数据表?
System.InvalidOperationException: Type System.String[] does not implement IXmlSerializable interface therefore can not proceed with serialization.
最佳答案
您可以轻松地将 DataTable 将有问题的 Authors 列更改为 String 并使用适当的分隔符(如“|”)连接 string[] 数据或者 ”; ”。
DataTable xmlFriendlyTable = oldTable.Clone();
xmlFriendlyTable.Columns["Author"].DataType = typeof(String);
xmlFriendlyTable.Columns["Author"].ColumnMapping = MappingType.Element;
foreach(var row in oldTable.Rows) {
object[] rowData = row.ItemArray;
object[] cpyRowData = new object[rowData.Length];
for(int i = 0; i<rowData.Length; i++) {
if(rowData[i] != null && rowData[i].GetType() == typeof(String[])) {
cpyRowData[i] = String.Join("; ", (rowData[i] as String[]));
} else {
cpyRowData[i] = rowData[i];
}
xmlFriendlyTable.Rows.Add(cpyRowData);
}
}
xmlFriendlyTable.WriteXml( ... );
注意 上面是在浏览器中写的,所以可能会有语法错误。
关于ado.net - 无法为 DataTable 编写 XML,因为 Windows 搜索返回 Authors 属性的字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3145351/