我使用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" />`
处理此问题的最佳方法是什么?我意识到我可以使用绑定重定向,但由于这个类是在项目本身中定义的,因此重定向需要不断更新并且感觉不对。似乎我必须做一些不正确的事情而不必担心这一点,但同时看起来并不像那样不寻常。