C # WriteXml, когда DataTable содержит пользовательский комплексный тип - PullRequest
0 голосов
/ 22 февраля 2011

Я использую объект System.Data.DataTable для хранения данных в приложении WPF. Эти данные сериализуются с использованием метода DataTable.WriteXml.

Проблема заключается в том, что столбцы имеют пользовательский тип данных - тип, который определяется в самом приложении. В результате схема, записанная с помощью метода WriteXml (с использованием перегрузки XmlWriteMode.WriteSchema), содержит номер версии текущей сборки. Это может вызвать проблему с простым повышением номера версии самого приложения.

Пример кода:

У нас есть собственный класс, определенный в проекте:

public class Customer
{      
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Мы добавляем столбец этого типа и добавляем несколько строк в таблицу данных:

customerTable.Columns.Add("CustomerInfo", typeof(Customer));
for (int i = 0; i < 5; i++)
{
    DataRow newRow = customerTable.NewRow();
    newRow[0] = new Customer() { FirstName = "John", LastName = "Doe" };
    customerTable.Rows.Add(newRow);
}

И в какой-то момент сериализует DataTable в файл со схемой:

customerTable.WriteXml(fileSavePath, XmlWriteMode.WriteSchema);

Теперь схема будет включать следующий вывод, который включает версию сборки (WpfApplication3 в моем примере):

<xs:element name="CustomerInfo" msdata:DataType="WpfApplication3.Customer, WpfApplication3, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" type="xs:anyType" minOccurs="0" />`

Какой лучший способ справиться с этим? Я понимаю, что мог бы использовать перенаправление привязки, но поскольку этот класс определен в самом проекте, перенаправление необходимо постоянно обновлять, и оно просто кажется неправильным. Похоже, я должен делать что-то неправильное, чтобы беспокоиться об этом, но в то же время не похоже на что-то , что необычно.

...