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)
);
我认为这是不可能的。
对于这种情况,您将不得不使用另一个对象来隐藏您将对象存储为Xml字符串的事实。
:
- ClassA的属性类型为ClassB。
- ClassC将是实际的linq类。它看起来就像ClassA,除了它没有ClassB类型的属性,而是一个字符串类型的字段。
- 保存时,映射类a到类c。这是将ClassB序列化为Xml的地方。
- 读取时,将ClassC映射到ClassA。这就是将xml反序列化为类b的地方。