Przykro mi, jeśli jest to duplikat. Przeszukałem kilka miejsc na odpowiedź, że mogę zrozumieć, w tym:Jak szeregować odziedziczoną klasę za pomocą ProtoBuf-Net
ProtoBuf.net Base class properties is not included when serializing derived class
Serialize inherited classes using protobuf-net
Przepraszam, ale ja naprawdę nie rozumiem odpowiedzi. Szukam szybszego, bardziej kompaktowego serializatora binarnego, a ProtoBuf wygląda na to, że może to być odpowiedź. Muszę serializować zestaw klas, które wszystkie pochodzą z jednej klasy bazowej. Jest ich duża liczba, więc przed przystąpieniem do edycji kodu zajęć przeprowadziłem prosty test. Ponadto nie chcę modyfikować klas w żaden sposób, który mógłby wpłynąć na deserializację starszych, utrwalonych plików wygenerowanych przy pomocy serializatora binarnego NET.
Jest to klasa bazowa:
[ProtoContract]
public class BaseClass
{
[ProtoMember(1)]
public string Name
{
get; set;
}
[ProtoMember(2)]
public int Age
{
get; set;
}
}
Jest to klasa pochodna:
[ProtoContract]
public class SubClass1 : BaseClass
{
[ProtoMember(3)]
public string Town
{
get; set;
}
[ProtoMember(4)]
public Sex Sex
{
get; set;
}
}
Jest to kod do serializacji i deserializacji (zaczerpnięte bezpośrednio z Getting Started Guide
var person = new SubClass1 { Age = 25, Name = "Fred", Town = "Denbigh", Sex = Sex.Female };
using (var file = File.Create(filename))
{
Serializer.Serialize(file, person);
}
i de-usrializować:
SubClass1 newPerson;
using (var file = File.OpenRead(filename))
{
newPerson = Serializer.Deserialize<SubClass1>(file);
}
MessageBox.Show(newPerson.Name +
" : " + newPerson.Town +
" : " + newPerson.Age.ToString() +
" : " + newPerson.Sex);
Rezultatem jest ": Denbigh: 0: Female"
Jakoś wartości z właściwości klasy bazowej nie są w odcinkach? Pierwotnie testowałem to z indeksami ProtoMember dla klasy pochodnej jako 1, 2. Sądziłem, że to nie zadziała, więc poszedł na 3, 4. Wydaje się, że nie robi różnicy. W mojej paranoi wpadłem sam test z wykorzystaniem standardowego NET serializatora binarnego i dostał oczekiwany rezultat: „Fred: Denbigh: 25: Kobieta”
Czego mi brakuje proszę?
dziękuję bardzo - tak proste – ScruffyDuck
Zapisuje mi pisać, ta –
link wydaje się być uszkodzony ... – RenniePet