Невозможно записать XML для DataTable, поскольку Windows Search возвращает строковый массив для свойства авторов - PullRequest
4 голосов
/ 30 июня 2010

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

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

По сути, как я могу заставить WriteXML работать с этими данными?таблица?

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

1 Ответ

1 голос
/ 25 января 2012

Вы можете легко скопировать свой 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( ... );

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

...