Store String Array In appSettings?

I’d like to store a one dimensional string array as an entry in my appSettings. I can’t simply separate elements with , or | because the elements themselves could contain those characters.

I was thinking of storing the array as JSON then deserializing it using the JavaScriptSerializer.

Is there a “right” / better way to do this?

(My JSON idea feels kinda hacky)

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

You could use the AppSettings with a System.Collections.Specialized.StringCollection.

var myStringCollection = Properties.Settings.Default.MyCollection;
foreach (String value in myStringCollection)
{ 
    // do something
}

Each value is separated by a new line.

Here’s a screenshot (german IDE but it might be helpful anyway)

Store String Array In appSettings?

Method 2

For strings it is easy, simply add the following to your web.config file:

<add key="myStringArray" value="fred,Jim,Alan" />

and then you can retrieve the value into an array as follows:

var myArray = ConfigurationManager.AppSettings["myStringArray"].Split(',');

Method 3

ASP.Net Core supports it binding a list of strings or objects.

For strings as mentioned, it is possible to retrieve it through AsEnumerable().

Or a list of objects via Get<List<MyObject>>(). The sample is below.

appsettings.json:

{
 ...
   "my_section": {
     "objs": [
       {
         "id": "2",
         "name": "Object 1"
       },
       {
         "id": "2",
         "name": "Object 2"
       }
     ]
   }
 ...
}

Class to represent the object

public class MyObject
{
    public string Id { get; set; }
    public string Name { get; set; }
}

Code to retrieve from appsettings.json

Configuration.GetSection("my_section:objs").Get<List<MyObject>>();

Method 4

For integers I found the following way quicker.

First of all create a appSettings key with integer values separated by commas in your app.config.

<add key="myIntArray" value="1,2,3,4" />

Then split and convert the values into int array by using LINQ

int[] myIntArray =  ConfigurationManager.AppSettings["myIntArray"].Split(',').Select(n => Convert.ToInt32(n)).ToArray();

Method 5

You may also consider using custom configuration section/Collection for this purpose.
Here is a sample:

<configSections>
    <section name="configSection" type="YourApp.ConfigSection, YourApp"/>
</configSections>

<configSection xmlns="urn:YourApp">
  <stringItems>
    <item value="String Value"/>
  </stringItems>
</configSection>

You can also check on this excellent Visual Studio add-in that allows you to graphically design .NET Configuration Sections and automatically generates all the required code and a schema definition (XSD) for them.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x