4

System.AuthorWindows 属性是一个多值字符串。Windows 搜索将此值作为 DataColumn 中的字符串数组返回。(列的数据类型是string[]or String()。)当我在结果数据表上调用该WriteXML方法时,我得到以下InvalidOperationException异常。

有没有办法指定数据表的 xml-serializer 用于特定列或特定数据类型?

基本上,我怎样才能WriteXML使用这个数据表?

System.InvalidOperationException:类型 System.String[] 未实现 IXmlSerializable 接口,因此无法进行序列化。

4

1 回答 1

1

您可以轻松地复制您的 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( ... );

注意以上是在网络浏览器中编写的,因此可能存在语法错误。

于 2012-01-25T16:03:45.590 回答