當然 - 你必須在某種程度上實現序列化,但你可以輕鬆地做到這一點。
目前還不清楚您使用的是什麼樣的序列化 - 如果您使用的是來自.NET的「原始」二進制序列化,您希望覆蓋GetObjectData
以僅在序列化中添加相關數據,然後在受保護的構造函數採取SerializationInfo
和StreamingContext
,反向填充來自相同數據的結構。有關詳細信息,請參閱this MSDN article。
我不知道如果使用XML序列化會發生什麼情況。
如果你寫你自己的系列化(即你有一個方法,如WriteToStream
),那麼你可以選擇代表你想要的東西,當然。
編輯:這聽起來像你可能有一個現有的文件格式,你需要閱讀,但你可以定義自己的類型。很容易有一個類或結構與多個成員和可能面具說什麼設置,雖然不知道更多它可能不是最好的設計。雖然你可以使用顯式佈局,使內存本效率,它可能是最簡單的辦法有不同的成員:
struct Foo
{
// Bit-set to determine which fields are actually used
private readonly byte mask;
private readonly int value1;
private readonly int value2;
private readonly int value3;
public Foo(byte mask, int value1, int value2, int value3)
{
this.mask = mask;
this.value1 = value1;
this.value2 = value2;
this.value3 = value3;
}
}
然後某處(無論是在數據類型或者沒有),這樣的:
Foo ReadFoo(Stream stream)
{
byte mask = stream.ReadByte();
int value1 = 0, value2 = 0, value3 = 0;
if ((mask & 1) == 1)
{
// However you do that, depending on your file format
value1 = ReadInt32FromStream(stream);
}
if ((mask & 2) == 2)
{
// However you do that, depending on your file format
value2 = ReadInt32FromStream(stream);
}
if ((mask & 4) == 4)
{
// However you do that, depending on your file format
value3 = ReadInt32FromStream(stream);
}
return new Foo(mask, value1, value2, value3);
}
順便說一下,我會認真考慮一個結構是否是確實是這裏最好的方法 - 考慮用類來代替。我很少創建自己的結構。
你用什麼來將結構寫入文件? –
我已經試過寫一切,但如果它不動態改變你不能正確地編組數據。所以問題依然存在,甚至有可能,或者我只是在浪費時間。我沒有自己寫文件,我只是把數據拿出來。 – michael