【问题标题】:Serialize and Deserialize a static member in a class?序列化和反序列化类中的静态成员?
【发布时间】:2013-08-22 08:14:27
【问题描述】:

我在我的简单项目中遇到了问题。我想建立一个书店经理来跟踪进店的书(在帐单上,来自供应商)和在我卖掉书时离开书店的书。为了跟踪书籍,我将它们存储在字典中,key 是书籍的 ISBN。它看起来像这样:

Dictionary<string,IBook> BOOKS;

此外,我还需要一本记录不同供应商账单的字典。 那个看起来像这样:

Dictionary<string,Supplier> SUPPLIERS;

本例中的 key 是供应商名称。 每个供应商都有一个账单列表作为数据字段:

[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 的示例,但我没有序列化直接类中的静态成员(在我的例子中是供应商类)。

任何帮助表示赞赏:)

【问题讨论】:

  • 改用真实的数据库。
  • 为什么 billNumber 是静态的?为什么需要序列化它?
  • 我使用 billNumber 静态,这样当我添加新的 Bill 时,我可以区分它们。我需要序列化它,因为当我关闭应用程序时,值会丢失。

标签: c# serialization dictionary


【解决方案1】:

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

现在...假设您必须保存 lastBillNumber(以便您的下一个账单可以是 lastBillNumber+1。正确的做法是开设一个单例课程

class BillNumberGenerator
{
    protected int LastBillNumber;

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

static BillNumberGenerator MyBillNumberGenerator = new BillNumberGenerator();

然后你序列化它。所以你必须序列化SupplierBillBillNumberGenerator

【讨论】:

  • “billNumber 不是静态的”是什么意思?
  • @AlinArgintaru 更改了措辞。如果billNumber 是静态的,那么您所有的账单都有相同的billNumber
  • 天哪……我怎么能错过呢?谢谢你的回答!
猜你喜欢
  • 2012-10-31
  • 2020-06-07
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 2013-04-08
  • 2010-11-20
  • 1970-01-01
相关资源
最近更新 更多