Let us check the situation as you went to a super market and ordered some thing. After the purchase, the cashier summarized the amount and you have not so much of amount at that time. But you can take it from an ATM counter (I am saying a situation where credit/debit card payments not possible. Only ready cash want to be paid.). So you just leave the shop for taking the money and the shopkeeper want to keep your bill as a pending one and should deal with the billing of other customers. So keeping a bill or any thing as a pending one is our core discussion. You can keep the items in memory and can also easily forget them when a power failure occurred. So every thing should be persists in a file form is the best option.
Serialization is doing nothing, but keeps the state of an object in the form of a file. So you can access large amount of data through your application and also keep the object containing data in a file format. So you can carry your whole data along with you in a simple file format and can also access it whenever you wish. Saving an object state is termed as serialization and from the saved format regain the object's state is known as deserialization. In the sample code along with this article I saved the particular bill item in a serialized form and then deserialized it for later use. Remember that serialization has the format of xml or binary. If you use the xml format, it stores everything in a text format and can be readable. But binary format is a secure one and used in this article also.
Create a new VB.Net windows application and add a new class named Item to that project. This Item class is the object we are going to persist. Item class is used to store the items of a bill which want to be saved as a pending bill. Below is the structure of class Item.
<Serializable()>
Public Class Item
Private itemName As String
Private itemId As String
Private itemPrice As Double
Private itemQuantity As Long
Private netAmount As Double
Public Sub New()
itemName = ""
itemPrice = 0.0
itemQuantity = 0
netAmount = 0.0
End Sub 'New
Public Property ItemName() As String
Get
Return ItemName
End Get
Set(ByVal value As String)
itemName = value
End Set
End Property
Public Property ItemId() As String
Get
Return ItemId
End Get
Set(ByVal value As String)
itemId = value
End Set
End Property
Public Property ItemPrice() As Double
Get
Return itemPrice
End Get
Set(ByVal value As Double)
itemPrice = value
End Set
End Property
Public Property ItemQuantity() As Long
Get
Return ItemQuantity
End Get
Set(ByVal value As Long)
itemQuantity = value
End Set
End Property
Public Property NetAmount() As Double
Get
Return NetAmount
End Get
Set(ByVal value As Double)
netAmount = value
End Set
End Property
End Class 'Item
As you can see there are 5 properties declared in the class to store the items as their names describes. Storing operation will took place in a win form. But the most important thing want to be notice is the [Serializable] attribute. Every object you want to serialize should at least decorate this attribute.
In the front end you have 4 text boxes for entering values for name, quantity, price and net amount of a particular item. If you clicks on Save button nothing special will happen. Just saving the record. But our aim the button for saving the pending bills. When u clicks that button, an object of Item class will create and set the objects properties with the corresponding values of the fields. The ItemId property will set by creating a new GUID, as the object will save using this value. Now and now we want to save this object in a file format. Just look the code below
'Create a file stream in which teh object will store
Dim fstream As FileStream = File.Create((SERIALIZED_FILE_PATH + "@" \ +objItem.ItemId))
'Object will store in binary format
Dim bf As New BinaryFormatter()
'Bind the filestream with that of binaryformatter. Also mentioned the object to save
bf.Serialize(fstream, objItem)
fstream.Close()
fstream = Nothing
bf = Nothing
We are going to store the object in a file so first create a FileStream object using static method Create of File Class. The argument is the full path name of the file. After setting this we want to create an object of BinaryFormatter, as we are going to store the object in a binary format. Use the Serialize() method of BinaryFormatter to serialize the particular object. Arguments are the file stream we created and the object which we want to serialize. If you browse to the location, you can see the file with an extension of ".dat" (you can use your own extension). There is a list view in the form to view all object data serialized. For that we are using Deserialize() method of BinaryFormatter. As Deserialize() returns an object type for occupying all types of data, we need to cast the returned value. Just look the code below.
Dim fstream As FileStream = File.OpenRead(serializedFiles.GetValue(fileIndex).ToString())
Dim bf As New BinaryFormatter()
Dim ser As Item = CType(bf.Deserialize(fstream), Item)
Dim itemValues As String() = {ser.ItemName, ser.ItemPrice.ToString(), ser.ItemQuantity.ToString(), ser.NetAmount.ToString(), ser.ItemId.ToString()}
itemsListView.Items.Add(New ListViewItem(itemValues))
You want to select an item from list view for saving it as a normal paid bill. Then click the Save button to finish the process, as it saves the values to database and deletes the particular pending bill from the location.
So basic concept is that every pending item will be stored as a serialized object and you can select any saved object at any time and converted it to a paid bill. This is really a concept and you can design it in your own way. Please check the code along with this.
NOTE: THIS ARTICLE IS CONVERTED FROM C# TO VB.NET USING A CONVERSION TOOL. ORIGINAL ARTICLE CAN BE FOUND ON C# CORNER (http://www.c-sharpcorner.com/).