反正有方便地将字典转换为string?

我发现在字典中的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()) + "}"; } 

如果你只是为了debugging目的而序列化,最简单的方法是:

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

这是因为IDictionary<TKey, TValue>是一个ICollection<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() ); 

首先迭代每个键值对,并将其格式化为string,然后转换为数组并join到单个string中。

如果你想使用Linq,你可以尝试这样的事情:

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

“testing”是你的字典。 请注意,Zip()的第一个参数只是一个占位符,因为null不能被传递)。

如果格式不重要,请尝试

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

这会给你类似的东西

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

我得到了这个简单的答案。使用JavaScriptSerializer类为此。

你可以简单地使用Dictionary对象作为参数来调用Serialize方法。

例:

 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"} 

您可以通过字典的键循环,并与价值一起打印…

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

我喜欢ShekHar_Pro的方法来使用序列化程序。 只有build议是使用json.net序列化,而不是内置的JavaScriptSerializer,因为它比较慢。

另一个scheme

 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]

你必须做的是创build一个扩展Dictionary的类并覆盖ToString()方法。

再见