c# -使用Linq to SQL和XML序列化

本文关键字:XML 序列化 SQL to 使用 Linq | 更新日期: 2023-09-27 18:13:17

上使用Linq to SQL和XML序列化时,我不太明白一些我的对象的属性。

我经常创建我的表,然后使用Linq to SQL生成我所有的类。但是现在,由于我序列化了一些类属性,所以在创建数据库表时,我将这些属性定义为varchar(用于XML字符串),而不是它们的实际类型。因此,自动生成的类是用字符串类型的属性创建的,而不是实际的类。

是否有一种方法告诉Linq在从数据库插入/提取对象时自动应用我的反/序列化?并保持我的序列化属性在Linq自动生成类的原始类型?

一个类的例子

注意classBProp的类型是ClassB。

class ClassA
{
    private string name;
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    private ClassB classBProp; // <-- This is something i'm serializing
    public ClassB ClassBProp
    {
        get { return classBProp; }
        set { classBProp = value; }
    }
    public ClassA()
    {
        classBProp = new ClassB();
    }
}
类 的表

这里ClassBProp的类型是varchar。因此,Linq to SQL生成带有字符串属性的类。

CREATE TABLE [dbo].[ClassA] (
[Id]         INT           NOT NULL,
[Name]       VARCHAR (50)  NULL,
[ClassBProp] VARCHAR (MAX) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);

c# -使用Linq to SQL和XML序列化

我认为这是不可能的。

对于这种情况,您将不得不使用另一个对象来隐藏您将对象存储为Xml字符串的事实。

:

  1. ClassA的属性类型为ClassB。
  2. ClassC将是实际的linq类。它看起来就像ClassA,除了它没有ClassB类型的属性,而是一个字符串类型的字段。
  3. 保存时,映射类a到类c。这是将ClassB序列化为Xml的地方。
  4. 读取时,将ClassC映射到ClassA。这就是将xml反序列化为类b的地方。