Наследование двоичной сериализации .Net - PullRequest
1 голос
/ 16 декабря 2009

В контексте C # у меня есть класс B, который помечен как Serializable и кто наследует от класса A, кто не помечен как этот. Могу ли я найти способ сериализации экземпляра B без пометки A как сериализуемого?

Ответы [ 2 ]

1 голос
/ 16 декабря 2009

Попробуйте использовать суррогат сериализации. Хорошая статья Джеффа Рихтера

0 голосов
/ 16 декабря 2009

Я думаю, что если вы выполните сериализацию custom , это должно сработать - т.е. реализовать 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, который, как я полагаю, вы используете).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...