我在简单的项目中遇到了问题。我想建立一个书店管理员来跟踪商店里的书籍(来自供应商的账单)以及出售时离开商店的书籍。为了跟踪书籍,我将它们存储在字典中,键是书籍的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类)。
感谢任何帮助:)
答案 0 :(得分:5)
billNumber
不应该是static
。 lastBillNumber
可以是static
。我认为您的所有账单都不能共享billNumber
: - )
现在......让我们说你必须保存lastBillNumber
(这样你的下一张账单就可以lastBillNumber+1
。正确的地方就是拥有一个单身人士课程
class BillNumberGenerator
{
protected int LastBillNumber;
public GetNewBillNumber()
{
LastBillNumber++;
return LastBillNumber;
}
}
static BillNumberGenerator MyBillNumberGenerator = new BillNumberGenerator();
然后你序列化它。因此,您必须序列化Supplier
,Bill
,BillNumberGenerator
。