Невозможно записать 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( ... );
ПРИМЕЧАНИЕ. В веб-браузере написано выше, поэтому возможны синтаксические ошибки.