我经常发现自己正在实施这类课程:
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);
是否有正确的方法来强制执行此约束?
答案 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
{
}