Невозможно записать XML для DataTable, поскольку Windows Search возвращает строковый массив для свойства авторов

System.Author Свойство Windows представляет собой строку с несколькими значениями. Windows Search возвращает это значение в виде массива строк в DataColumn. (Тип данных столбца string[] или же String().) Когда я звоню WriteXML Метод по полученной таблице данных, я получаю следующее InvalidOperationException исключение.

Есть ли способ указать xml-сериализатор таблицы данных для использования для конкретных столбцов или конкретных типов данных?

В принципе, как я могу сделать WriteXML работать с этой таблицей данных?

System.InvalidOperationException: Тип System.String[] не реализует интерфейс IXmlSerializable, поэтому не может продолжить сериализацию.

1 ответ

Вы можете легко скопировать ваш DataTable, изменив столбец Авторы с ошибками на 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( ... );

ПРИМЕЧАНИЕ. В веб-браузере написано выше, поэтому возможны синтаксические ошибки.

Другие вопросы по тегам