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" />`

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

0 ответов

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