Reputation: 819
I'm learning C# by writing a home library manager.
I have a BookController that will store the books in a data structure and perform operations on them.
Does C# have a way of saving the data in the dictionary to a local file perhaps in an XML fashion to load later, or am I going to have to write it myself?
What is the best method of saving and loading this data available to C#? Just need pointed in a good direction.
Upvotes: 12
Views: 11759
Reputation: 1062905
Actually, C# (the language) doesn't know anything about serialization, but .NET (the framework) provides lots of ways... XmlSerializer
, BinaryFormatter
, DataContractSerializer
(.NET 3.0) - or there are a few bespoke serialization frameworks too.
Which to use depends on your requirements; BinaryFormatter
is simple to use, but burns assembly metadata information into the file - making it non-portable (you couldn't open it in Java, for example). XmlSerializer
and DataContractSerializer
are primarily xml-based, making it quite portable, but fairly large unless you compress it.
Some proprietary serializers are half-way between the two; protobuf-net is a binary formatter (so very dense data), but which follows a portable standard for the data format (Google's protocol buffers spec). Whether this is useful depends on your scenario.
Typical code (here using XmlSerializer
):
XmlSerializer ser = new XmlSerializer(typeof(Foo));
// write
using (var stream = File.Create("foo.xml"))
{
ser.Serialize(stream, foo); // your instance
}
// read
using (var stream = File.OpenRead("foo.xml"))
{
Foo newFoo = (Foo)ser.Deserialize(stream);
}
Upvotes: 24
Reputation: 71896
If you want your data to be in XML format there's XmlSerializer.
EDIT: For some reason I was downvoted for suggesting this because XmlSerializer cannot serialize a Dictionary.
To get around this problem you can always customize the serialization process like this
Upvotes: 1
Reputation: 3434
I've created an extension method which takes an object and creates an xml string for you, all you need to do is save/load from file. XmlSerialisation
Upvotes: 1
Reputation: 9437
You should also consider looking at Linq to SQL (or Entity Framework) for O/R mapping and storing your data into a database (SQL CE, SQL Express).
Upvotes: 1
Reputation: 124682
Look at Serialization and the ISerializable interface
It allows you to save an object's state in a portable form.
Upvotes: 6