79

I have below code in C#

Dictionary<string, object> dObject = new Dictionary<string, object>();

I want to convert dObject to Dictionary<string, string>. How can I do this?

skaffman
  • 398,947
  • 96
  • 818
  • 769
Manoj Singh
  • 7,569
  • 34
  • 119
  • 198

6 Answers6

125

Use the ToDictionary method:

Dictionary<string, string> dString = dObject.ToDictionary(k => k.Key, k => k.Value.ToString());

Here you reuse the key from the original dictionary and you convert the values to strings using the ToString method.

If your dictionary can contain null values you should add a null check before performing the ToString:

Dictionary<string, string> dString = dObject.ToDictionary(k => k.Key, k => k.Value == null ? "" : k.Value.ToString());

The reason this works is that the Dictionary<string, object> is actually an IEnumerable<KeyValuePair<string,object>>. The above code example iterates through the enumerable and builds a new dictionary using the ToDictionary method.

Edit:

In .Net 2.0 you cannot use the ToDictionary method, but you can achieve the same using a good old-fashioned foreach:

Dictionary<string, string> sd = new Dictionary<string, string>(); 
foreach (KeyValuePair<string, object> keyValuePair in dict)
{
  sd.Add(keyValuePair.Key, keyValuePair.Value.ToString());
}

Edit2:

If you are on .Net 2.0 and you can have null values in the dictionary the following should be safe:

Dictionary<string, string> sd = new Dictionary<string, string>(); 
foreach (KeyValuePair<string, object> keyValuePair in dict)
{
  sd.Add(keyValuePair.Key, keyValuePair.Value == null ? "" : keyValuePair.Value.ToString());
}
Rune Grimstad
  • 35,612
  • 10
  • 61
  • 76
9

.NET 3.5:

Dictionary<string, string> result = dObject.ToDictionary(kvp => kvp.Key, kvp => Convert.ToString(kvp.Value));

.NET 2.0:

Dictionary<string, string> result = new Dictionary<string, string>();
foreach (KeyValuePair<string, object> kvp in dObject) result.Add(kvp.Key, Convert.ToString(kvp.Value));
Jaroslav Jandek
  • 9,463
  • 1
  • 28
  • 30
4

Since you are using .net 2.0:

Dictionary<string, string> dString = new Dictionary<string, string>();

foreach (KeyValuePair<string, object> item in dObject)
{
    dString.Add(item.Key, item.Value.ToString());
    //here item.Value.ToString() is an example
    //you should convert your item to string according to the requirement
}
Shimmy Weitzhandler
  • 101,809
  • 122
  • 424
  • 632
Cheng Chen
  • 42,509
  • 16
  • 113
  • 174
  • What if there is NULL values in it? – Manoj Singh Feb 09 '11 at 08:32
  • 3
    @MKS: That's why I'm saying "convert your item to string according to the requirement", for example you can use `string.Empty` for null values, or the string "NULL" for null values...everything depends on the requirement. – Cheng Chen Feb 09 '11 at 08:35
  • Sometime there can be null values also in the key, please suggest how to convert it? – Manoj Singh Feb 09 '11 at 08:41
2

How about:

Dictionary<string, string> newDictionary = dObject.ToDictionary(k => k.Key, k => (string) k.Value);
Arcturus
  • 26,677
  • 10
  • 92
  • 107
1

In .Net 2.0 probably your best friend is foreach loop:

Dictionary<string, object> dObject = new Dictionary<string, object>();
Dictionary<string, string> newObjects = new Dictionary<string, string>();

foreach (KeyValuePair<string, object> keyValuePair in dObject)
{
    newObjects.Add(keyValuePair.Key, keyValuePair.Value.ToString());
}
Rafal Spacjer
  • 4,838
  • 2
  • 26
  • 34
1
Dictionary<string, string> dString = dObject.ToDictionary(kvp => kvp.Key, kvp => kvp.Value.ToString());

It's just idea. You can insert any verifications.

Y.Yanavichus
  • 2,387
  • 1
  • 21
  • 34