C# WriteXml, когда DataTable содержит пользовательский сложный тип
Я использую объект System.Data.DataTable для хранения данных в приложении WPF. Эти данные сериализуются с использованием метода DataTable.WriteXml.
Проблема заключается в том, что столбцы имеют пользовательский тип данных - тип, который определяется в самом приложении. В результате схема, записанная с помощью метода WriteXml (с использованием перегрузки XmlWriteMode.WriteSchema), содержит номер версии текущей сборки. Это может вызвать проблему с простым увеличением номера версии самого приложения.
Пример кода:
У нас есть собственный класс, определенный в проекте:
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
Мы добавляем столбец этого типа и добавляем несколько строк в DataTable:
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" />`
Каков наилучший способ справиться с этим? Я понимаю, что мог бы использовать перенаправление привязки, но поскольку этот класс определен в самом проекте, перенаправление необходимо постоянно обновлять, и оно просто кажется неправильным. Кажется, что я должен делать что-то неправильное, чтобы беспокоиться об этом, но в то же время не кажется чем- то необычным.