繁体   English   中英

.Net二进制序列化继承

[英].Net Binary Serialization inheritance

在C#上下文中,我有一个B类,它被标记为可序列化,并且继承自未标记为此类的A类。 我可以找到一种方法来序列化B的实例而不将A标记为可序列化吗?

尝试使用序列化代理。 Jeff Richter的精彩文章

我认为,如果您执行自定义序列化,则应该可以工作,即实现ISerializable 不过,这不是一个不错的选择:

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
class A {
    public int Foo { get; set; }
}
[Serializable]
class B : A, ISerializable {
    public string Bar { get; set; }
    public B() { }

    void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) {
        info.AddValue("Foo", Foo);
        info.AddValue("Bar", Bar);
    }
    private B(SerializationInfo info, StreamingContext context) {
        Foo = info.GetInt32("Foo");
        Bar = info.GetString("Bar");
    }    
}
static class Program {
    static void Main() {
        BinaryFormatter bf = new BinaryFormatter();
        B b = new B { Foo = 123, Bar = "abc" }, clone;
        using (MemoryStream ms = new MemoryStream()) {
            bf.Serialize(ms, b);
            ms.Position = 0;
            clone = (B)bf.Deserialize(ms);
        }
        Console.WriteLine(clone.Foo);
        Console.WriteLine(clone.Bar);
    }
}

您是否只想存储数据? 我还可以想到一种使用protobuf-net(而不是BinaryFormatter ,我认为您正在使用)来执行此操作的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM