针对琐碎案例

时间:2015-12-22 12:08:59

标签: c# .net serialization

我们假设我有这个非常有用的界面:

public interface IFoo
{
    void Bar();
}

我知道这个接口将在需要序列化/反序列化的上下文中使用,所以我使这个接口扩展ISerializable以强制此接口的所有实现都可序列化并向接口客户端显示:

public interface IFoo : ISerializable
{
    void Bar();
}

但现在我遇到了问题。 IFoo的所有具体实现都被迫实现GetObjectData数据,即使在仅使用Serializable属性标记类完全正常的情况下也是如此:

[Serializable]
public sealed class FooWithString : IFoo
{
    public string MyString { get; set; }

    public void Bar()
    {
    }

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("MyString", MyString, typeof(string)); // This is pointless, but I have to do it
    }

    private FooWithString(SerializationInfo info, StreamingContext context)
    {
        MyString = info.GetString("MyString"); // And this is pointless too, but I have to do it
    }
}

这个例子非常简单,但是如果我有一个5-6个整数的类,那么这个图像是什么?这伤害了很多!

有没有办法实现这样的目标:

[Serializable]
public sealed class FooWithString2 : IFoo
{
    public string MyString { get; set; }

    public void Bar()
    {
    }

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        UseDefaultSerializationMechanism();
    }

    private FooWithString(SerializationInfo info, StreamingContext context)
    {
        UseDefaultDeserializationMechanism();
    }
}

甚至更酷:

[Serializable]
public sealed class FooWithString3 : IFoo
{
    public string MyString { get; set; }

    public void Bar()
    {
    }

    // No pointless implementations!
}

0 个答案:

没有答案