Есть ли способ конвертировать словарь в String? - программирование
Подтвердить что ты не робот

Есть ли способ конвертировать словарь в String?

Я обнаружил, что стандартная реализация ToString в словаре не то, что я хочу. Я хотел бы иметь {key=value, ***}.

Любой удобный способ его получить?

4b9b3361

Ответ 1

Попробуйте использовать этот метод расширения:

public static string ToDebugString<TKey, TValue> (this IDictionary<TKey, TValue> dictionary)
{
    return "{" + string.Join(",", dictionary.Select(kv => kv.Key + "=" + kv.Value).ToArray()) + "}";
}

Ответ 2

Если вы просто хотите сериализоваться для целей отладки, более короткий путь - использовать String.Join:

var asString = string.Join(";", dictionary);

Это работает, потому что IDictionary<TKey, TValue> реализует IEnumerable<KeyValuePair<TKey, TValue>>.

Ответ 3

Как насчет метода расширения, например:

public static string MyToString<TKey,TValue>
      (this IDictionary<TKey,TValue> dictionary)
{
    if (dictionary == null)
        throw new ArgumentNullException("dictionary");

    var items = from kvp in dictionary
                select kvp.Key + "=" + kvp.Value;

    return "{" + string.Join(",", items) + "}";
}

Пример:

var dict = new Dictionary<int, string>
{
    {4, "a"},
    {5, "b"}
};

Console.WriteLine(dict.MyToString());

Вывод:

{4=a,5=b}

Ответ 4

Нет удобного способа. Вам придется сворачивать самостоятельно.

public static string ToPrettyString<TKey, TValue>(this IDictionary<TKey, TValue> dict)
{
    var str = new StringBuilder();
    str.Append("{");
    foreach (var pair in dict)
    {
        str.Append(String.Format(" {0}={1} ", pair.Key, pair.Value));
    }
    str.Append("}");
    return str.ToString();
}

Ответ 5

Может быть:

string.Join
(
    ",",
    someDictionary.Select(pair => string.Format("{0}={1}", pair.Key.ToString(), pair.Value.ToString())).ToArray()
);

Сначала вы повторяете каждую пару значений ключа и форматируете его так, как хотите видеть в виде строки, а затем конвертируете в массив и объединяете в одну строку.

Ответ 6

Я получил этот простой ответ. Используйте JavaScriptSerializer Класс для этого.

И вы можете просто вызвать метод Serialize с объектом Dictionary в качестве аргумента.

Пример:

var dct = new Dictionary<string,string>();
var js = new JavaScriptSerializer();
dct.Add("sam","shekhar");
dct.Add("sam1","shekhar");
dct.Add("sam3","shekhar");
dct.Add("sam4","shekhar");
Console.WriteLine(js.Serialize(dct));

Вывод:

{"sam":"shekhar","sam1":"shekhar","sam3":"shekhar","sam4":"shekhar"}

Ответ 7

Если вы хотите использовать Linq, вы можете попробовать что-то вроде этого:

String.Format("{{{0}}}", String.Join(",", test.OrderBy(_kv => _kv.Key).Zip(test, (kv, sec) => String.Join("=", kv.Key, kv.Value))));

где "test" - ваш словарь. Обратите внимание, что первый параметр для Zip() является просто заполнителем, поскольку null не может быть передан).

Если формат не важен, попробуйте

String.Join(",", test.OrderBy(kv => kv.Key));

Что даст вам что-то вроде

[key,value], [key,value],...

Ответ 8

Другое решение:

var dic = new Dictionary<string, double>()
{
    {"A", 100.0 },
    {"B", 200.0 },
    {"C", 50.0 }
};

string text = dic.Select(kvp => kvp.ToString()).Aggregate((a, b) => a + ", " + b);

Значение текста: [A, 100], [B, 200], [C, 50]

Ответ 9

Вы можете прокручивать ключи Словаря и печатать их вместе со значением...

public string DictToString(Dictionary<string, string> dict)
{
    string toString = "";
    foreach (string key in dict.Keys)
    {
            toString += key + "=" + dict[key];
    }
    return toString;
}

Ответ 10

Мне нравится подход ShekHar_Pro для использования сериализатора. Только рекомендация - использовать json.net для сериализации, а не встроенного JavaScriptSerializer, поскольку он медленнее.

Ответ 11

Мне действительно нравятся решения с методом расширения, описанным выше, но в них отсутствует одна мелочь для будущих целей - входные параметры для разделителей, поэтому:

    public static string ToPairString<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, string pairSeparator, string keyValueSeparator = "=")
    {
        return string.Join(pairSeparator, dictionary.Select(pair => pair.Key + keyValueSeparator + pair.Value));
    }

Пример использования:

string result = myDictionary.ToPairString(Environment.NewLine, " with value: ");

Ответ 12

Что вам нужно сделать, это создать класс, расширяющий Dictionary и перезаписать метод ToString().

Увидимся