How Save A List In A App Settings C#
How to store a list of objects in application settings
I have recently became familiar with C# application settings, and it seems cool.
I was searching for a way to store a list of custom objects, but I couldn't find a way!
Actually I saw a post to store int[], but it wasn't helpful for this problem.
I tried to change the config of that solution in order to make it suitable for my problem. the XML config file of that was:
<Setting Name="SomeTestSetting" Type="System.Int32[]" Scope="User"> <Value Profile="(Default)" /> </Setting>
I tried to address my object as quoted below in the type attribute but it wasn't helpful since it doesn't recognizing my object... I tried "type = List" and "type="tuple[]"
both of these options didn't help me!
I have a class looks like:
class tuple { public tuple() { this.font = new Font ("Microsoft Sans Serif",8); this.backgroundcolor_color = Color.White; this.foregroundcolor_color = Color.Black; } public string log { get; set; } public Font font { get ; set; } public String fontName { get; set; } public string foregroundcolor { get; set; } public Color foregroundcolor_color { get; set; } public string backgroundcolor { get; set; } public Color backgroundcolor_color { get; set; } public Boolean notification { get; set; } }
and I want to store a list in application setting.
So is there any way to achieve this purpose.
Thanks in advance.
Cheers,
Answer #1:
You can use BinaryFormatter to serialize list of tuples as byte array and Base64 (as quite efficient way) to store byte array as string
.
First of all change your class to something like that (hint: [SerializableAttribute]
):
[Serializable()] public class tuple { public tuple() { this.font = new Font("Microsoft Sans Serif", 8); //.... }
Add property in settings named tuples
and type of string
.
Then you can use two methods to load and save generic list of tuples (List<tuple>
):
void SaveTuples(List<tuple> tuples) { using (MemoryStream ms = new MemoryStream()) { BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(ms, tuples); ms.Position = 0; byte[] buffer = new byte[(int)ms.Length]; ms.Read(buffer, 0, buffer.Length); Properties.Settings.Default.tuples = Convert.ToBase64String(buffer); Properties.Settings.Default.Save(); } } List<tuple> LoadTuples() { using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(Properties.Settings.Default.tuples))) { BinaryFormatter bf = new BinaryFormatter(); return (List<tuple>)bf.Deserialize(ms); } }
Example:
List<tuple> list = new List<tuple>(); list.Add(new tuple()); list.Add(new tuple()); list.Add(new tuple()); list.Add(new tuple()); list.Add(new tuple()); // save list SaveTuples(list); // load list list = LoadTuples();
I leave null
, empty string and exception checking up to you.
Answer #2:
Application configuration is not the good choice for storing the data at application runtime. For this use any available in .NET
serialization option like
- Xml Serialization
- Binary serialization with proto-buf
- Json serialization
- ORM mapping to some embedde database Sqlite
and many others...
Answer #3:
I'm not sure what you're wanting to do is best done in application settings. What you might want to look into is XDocument, and storing the values you need in a seperate configuration file.
Answer #4:
You can write custom types to extend .config
files. But this will not be storing your own arbitrary types in an existing section of confirmation but adding custom sections.
A custom configuration type could, by providing completely custom logic for child nodes, hold XML serialised data. I would argue that this is abusing the configuration system: it is for storing settings not complete state.
If this is what you want, there is a simple example in the documentation for ConfigurationSection
.
Answer #5:
As Mr.Tigran mentioned You can simply use Newtonsoft.Json Nuget Package to convert your Object(which can be a List or contain a List) using serialization and save it as a string (I made a string variable in Settings with "User Scope" and named it "myString"):
string json = JsonConvert.SerializeObject(myObject); Properties.Settings.Default.myString = json; Properties.Settings.Default.Save();
To load it we use deserialization :
string json = Properties.Settings.Default.myString; myObject myobject = JsonConvert.DeserializeObject<myObject>(json);
Answered By: Aria
How Save A List In A App Settings C#
Source: https://www.py4u.net/discuss/712301
Posted by: albanesethenteavill.blogspot.com
0 Response to "How Save A List In A App Settings C#"
Post a Comment