当DataTable包含自定义复杂类型时,C#WriteXml

时间:2011-02-22 14:32:26

标签: c# serialization datatable writexml

我使用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 个答案:

没有答案