序列化和反序列化类中的静态成员?

时间:2013-08-22 08:14:28

标签: c# serialization dictionary

我在简单的项目中遇到了问题。我想建立一个书店管理员来跟踪商店里的书籍(来自供应商的账单)以及出售时离开商店的书籍。为了跟踪书籍,我将它们存储在字典中,是书籍的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;
}

当我关闭应用程序时,我序列化 BOOKS字典和SUPPLIERS字典。当我打开它时,会发生反序列化。我的问题与Bill类中的静态成员 billNumber 有关。它不会序列化。每次打开应用程序时,变量都会重置为0。

我尝试使用how to serialize and deserialize static member中的示例,但我没有从直接类中序列化静态成员(在我的例子中是Supplier类)。

感谢任何帮助:)

1 个答案:

答案 0 :(得分:5)

billNumber不应该是staticlastBillNumber可以是static。我认为您的所有账单都不能共享billNumber: - )

现在......让我们说你必须保存lastBillNumber(这样你的下一张账单就可以lastBillNumber+1。正确的地方就是拥有一个单身人士课程

class BillNumberGenerator
{
    protected int LastBillNumber;

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

static BillNumberGenerator MyBillNumberGenerator = new BillNumberGenerator();

然后你序列化它。因此,您必须序列化SupplierBillBillNumberGenerator