Я нашел, что значение по умолчанию implemtation ToString в словаре не то, что я хочу. Я хотел бы иметь {key=value, ***}
.
Какой-либо удобный способ получить его?
Попробуйте этот дополнительный метод:
public static string ToDebugString<TKey, TValue> (this IDictionary<TKey, TValue> dictionary)
{
return "{" + string.Join(",", dictionary.Select(kv => kv.Key + "=" + kv.Value).ToArray()) + "}";
}
Если Вы просто хотите сериализировать для отладки целей, более короткий путь состоит в том, чтобы использовать String.Join
:
var asString = string.Join(";", dictionary);
Это работает потому что IDictionary<TKey, TValue>
реализации IEnumerable<KeyValuePair<TKey, TValue>>
.
Как насчет дополнительного метода, такого как:
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}
Никакой удобный путь. Вы будете иметь к самокрутке.
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();
}
Возможно:
string.Join
(
",",
someDictionary.Select(pair => string.Format("{0}={1}", pair.Key.ToString(), pair.Value.ToString())).ToArray()
);
Первый Вы выполняете итерации каждой пары "ключ-значение" и форматируете ее, поскольку требуется видеть как строка и позже преобразовать в массив и соединение в единственную строку.
Я получил этот простой ответ.. Используйте JavaScriptSerializer
Класс для этого.
И можно просто звонить, Сериализируют метод с объектом Словаря как аргумент.
Пример:
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"}
Если Вы хотите использовать Linq, Вы могли бы попробовать что-то вроде этого:
String.Format("{{{0}}}", String.Join(",", test.OrderBy(_kv => _kv.Key).Zip(test, (kv, sec) => String.Join("=", kv.Key, kv.Value))));
, где "тест" является Вашим словарем. Обратите внимание, что первый параметр, который Архивирует (), является просто заполнителем, так как пустой указатель не может быть передан).
, Если формат не важен, попробуйте
String.Join(",", test.OrderBy(kv => kv.Key));
, Который даст Вам что-то как
[key,value], [key,value],...
Другое решение:
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]
Можно циклично выполниться через Ключи Словаря и распечатать их вместе со значением...
public string DictToString(Dictionary<string, string> dict)
{
string toString = "";
foreach (string key in dict.Keys)
{
toString += key + "=" + dict[key];
}
return toString;
}
Мне нравится, когда подход ShekHar_Pro использует сериализатор. Только рекомендация состоит в том, чтобы использовать json.net для сериализации, а не встроенный JavaScriptSerializer, так как это медленнее.
Мне действительно нравятся решения с дополнительным методом выше, но они пропускают тот мало вещи для будущей цели - входные параметры для разделителей, таким образом:
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: ");
Что Вы должны сделать, должны создать класс, расширяющийся Dictionary
, и перезаписать ToString()
метод.
Увидимся