2013-08-22 100 views
1

我在我的簡單項目中遇到了一個問題。我想要建立一個書店管理員,用來跟蹤書店裏的書籍(來自供應商的帳單)以及出售商店時出售的書籍。爲了跟蹤圖書,我將它們存儲在一本字典中,其中密鑰是本書的ISBN。它看起來像這樣:序列化和反序列化類中的靜態成員?

Dictionary<string,IBook> BOOKS; 

此外,我需要另一本字典,跟蹤不同供應商的賬單。 這一個看起來是這樣的:

Dictionary<string,Supplier> SUPPLIERS; 

在這種情況下,關鍵是供應商的名稱。 每個供應商都有一個數據字段票據的列表:

[Serializable] 
public class Supplier 
{ 
    private List<Bill> supplierBills; 
    private string  supplierName; 
    .... 
} 

現在每個比爾看起來是這樣的:

[Serializable] 
public class Bill 
{ 
    private List<IBook> billBooksList; 
    private double  billTotalDue; 
    private DateTime billCreationDate; 
    private DateTime billDueDate; 

    public static int billNumber = 0; 
} 

當我關閉應用程序,我序列兩個教輔和供應商字典。當我打開它時,發生反序列化。我的問題與Bill類中的靜態成員billNumber有關。它不會序列化。每次我打開應用程序變量重置爲0.

我試圖使用how to serialize and deserialize static member的例子,但我沒有序列化從直接類靜態成員(在我的情況是供應商類)。

任何幫助表示讚賞:)

+1

使用一個真正的數據庫來代替。 – Oscar

+1

爲什麼billNumber靜態的?爲什麼你需要序列化它? – Vadim

+0

我使用billN當我添加一個新的比爾時,我可以區分它們。我需要序列化它,因爲當我關閉應用程序時,這個值會丟失。 –

回答

5

billNumber不應該是staticlastBillNumber可以是static。我不認爲所有的帳單可以共享相同的billNumber :-)

現在......可以說,你有救lastBillNumber(讓你的下一個賬單可以lastBillNumber+1,正確的地點做的是有一個單獨的類

class BillNumberGenerator 
{ 
    protected int LastBillNumber; 

    public GetNewBillNumber() 
    { 
     LastBillNumber++; 
     return LastBillNumber; 
    } 
} 

static BillNumberGenerator MyBillNumberGenerator = new BillNumberGenerator(); 

,然後你把它序列化。所以,你必須序列SupplierBillBillNumberGenerator

+0

「billNumber不是靜態的」是什麼意思? –

+0

@AlinArgintaru更改了措詞。如果'billNumber'是靜態的,那麼你的所有賬單都有相同的'billNumber'。 – xanatos

+0

哦,上帝......我怎麼會錯過呢?感謝您的回答 ! –