2

我想编写自己的序列化(xml 和二进制不适合我,我想要“更 ADO”的方式)

所以我定义了一个接口:

interface ISerializeData
{
    DataTable GetDataSchema();
    DataTable SerializeData();
    object DeserializeData(DataTable data);
}

现在我不想创建一个对象的实例来让我获取该对象的架构。

并且: DeserializeData 应该返回一个实例,而不是使用实例。因此我认为它也应该是静态的。(好的,它可以从数据表中初始化一个实例......)

有任何想法吗?我该如何建模?接口中不允许使用静态,并且我的类已经从另一个抽象基类继承。

任何想法表示赞赏!

4

2 回答 2

1

这个问题就是为什么其他序列化程序使用属性,因为它们允许您提供有关如何存储类的元数据,而不会强迫您处理类本身的实现。

于 2012-06-02T18:22:50.317 回答
1

也许我错了,但这实际上更像是实用程序类的任务。以DeserializeData为例。在代码中的某处,您决定要构建哪种类型。在您提议的代码中,您将选择类型并调用其静态方法。怎么办?每种类型都有自己的代码来进行序列化吗?您可能最终会创建一些类来完成所有工作,以保持 DRY。因此,您不妨DeserializeData在实用程序类中使用一种方法,例如:

public static T DeserializeData(DataTable data)
    where T : new
{
    var T = new T();
    .... // Set properties
}

在这种方法中,您可能会获得数据模式。

也许SerializeData()可以是一个实例方法,但这也会将它的工作委托给某个实用程序类。

如果我完全误解了你的问题,请告诉我。

于 2012-06-02T21:09:15.693 回答