序列化是否有优雅的模式?

时间:2015-12-21 21:35:16

标签: c# serialization interface

我经常发现自己正在实施这类课程:

public class Something
{
    public string Serialize()
    {
        // serialization code goes here
    }

    public static Something Deserialize(string str)
    {
        // deserialization code goes here
    }
}

我想通过使上面的类实现一个看起来像这样的接口,在所有这类类中强制执行此操作:

public interface ISerializationItem<T>
{
    string Serialize();
    T Deserialize(string str);
}

唉,这是不可能的,因为接口不能覆盖静态方法,并且该方法需要是静态的,因此它不依赖于类的任何实例。

更新:通常,我会反序列化,如下所示;静态方法有效地用于构造类的实例,所以我不想已经有一个实例可以做到这一点:

var str = "Whatever";
var something = Something.Deserialize(str);

是否有正确的方法来强制执行此约束?

1 个答案:

答案 0 :(得分:1)

保留您的数据&#34;类简单/纯任何逻辑,然后在单独的类中编写序列化过程。这将使维护数据类和序列化器更容易。如果每个类都需要自定义,则创建属性类并使用这些属性修饰数据类。

这是一些伪示例......

public class Employee
{
     public int Id { get; set;}

     [ForceSpecialHandling]
     public string Name { get; set; }
}

public class CustomSerializer
{
     public T Serialize<T>(string data)
     {
             // Write the serialization code here.
     }
}

// This can be whatever attribute name you want. 
// You can then check if the property or class has this attribute using reflection.
public class ForceSpecialHandlingAttribute : Attribute
{
}