3 回答

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個(gè)贊
按照建議,我從 Binaryformatter 切換到 Protobuf。之后,一些問題,我已經(jīng)得到了它的工作。所以,我以一種新的格式回到我原來(lái)的問題。
我有一個(gè)基類,想從它創(chuàng)建幾個(gè)不同的類。我看到了,您應(yīng)該使用 Protobufs ProtoInclude 屬性。但是,好像落后了。它說(shuō),我的基類必須知道派生類型。
[ProtoContract]
[ProtoInclude(7, typeof(SomeDerivedType))]
class SomeBaseType {...}
[ProtoContract]
class SomeDerivedType {...}
這是我派生的獨(dú)立課程。所以,它需要是通用的。
[ProtoContract]
public class grid
{
}
所以,我需要從中得出。
[ProtoContract]
public class Class_A : grid
{
}
[ProtoContract]
public class Class_B : grid
{
}
我理解,將 ProtoInclude 放在 Class_A 和 Class_B 上沒有任何作用。不,如果它需要在網(wǎng)格類上。做到這一點(diǎn)的最佳方法是什么?因?yàn)?,我正在打字,我想知道是否需要制作一個(gè)了解 Class_A 和 Class_B 的存根類?
[ProtoContract]
[ProtoInclude(7, typeof(Class_A))]
[ProtoInclude(8, typeof(Class_B))]
public class ProtoStub : grid
{
}
[ProtoContract]
public class Class_A : ProtoStub
{
}
[ProtoContract]
public class Class_B : ProtoStub
{
}
如果那行得通,那好吧。:( 但是,那只是多余的不必要的代碼,這讓我很傷心。

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個(gè)贊
我正在轉(zhuǎn)換的內(nèi)容:
//My base class
[ProtoContract]
public class grid
{
[ProtoMember(1), CategoryAttribute("Grid Settings"), DescriptionAttribute("Number of Horizontal GRID Segments.")]
public int HorizontalCells { get; set; }
//more properties
}
//Our Protostub ... Originally, just for Stackoverflow. But, I'm liking the name.
[ProtoContract]
[ProtoInclude(7, typeof(SKA_Segments))]
public class ProtoStub : grid
{
}
SKA_Segments seg_map;
[ProtoContract]
public class SKA_Segments : ProtoStub
{
public SKA_Segments()
{
}
public override void Draw(Graphics Graf, Pen pencil)
{
base.Draw(Graf, pencil);
}
}
//Serialization stuff
seg_map.HorizontalCells = 1000; //test property comes from the grid class
//Need to stream all three of these into the one file
//Serializer.SerializeWithLengthPrefix(stream, map, PrefixStyle.Base128, 1);
//Serializer.SerializeWithLengthPrefix(stream, col_map, PrefixStyle.Base128, 1);
Serializer.SerializeWithLengthPrefix(stream, seg_map, PrefixStyle.Base128, 1);
//De-Serialization stuff
//map = Serializer.DeserializeWithLengthPrefix<SKA_MAP>(stream, PrefixStyle.Base128, 1);
//col_map = Serializer.DeserializeWithLengthPrefix<SKA_Collision>(stream, PrefixStyle.Base128, 1);
seg_map = Serializer.DeserializeWithLengthPrefix<SKA_Segments>(stream, PrefixStyle.Base128, 1);
- 3 回答
- 0 關(guān)注
- 161 瀏覽
添加回答
舉報(bào)