ado.net - 无法为 DataTable 编写 XML,因为 Windows 搜索返回 Authors 属性的字符串数组

标签 ado.net ixmlserializable windows-search writexml

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/

相关文章:

IXmlSerializable 的 C# XML 序列化类型

.net - 如何在.NET 中将数据表转换为列表?

c# - 在 SQL Server 的 int 数据类型的情况下获取数字精度

c# - 在基类中实现 IXmlSerializable 时如何恢复到 'default' XML 序列化?

.net - 在复杂对象图上使用 IXmlSerializable 接口(interface)

sql-server-2008-r2 - 使用 Windows Search Service 和 SQL Server 2008 R2 进行全文搜索

c++ - 使用 IFilter C++ 获取 OLE 属性

git - 有没有办法忽略某些模式的 Windows 搜索索引?

c# - SQL Server 截断表 - 删除并重新创建 FK 约束脚本

c# - 异常详细信息 : System. Web.HttpException: 超出最大请求长度