2013-08-22 146 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

哦,上帝......我怎么会错过呢?感谢您的回答 ! –