反正有方便地将字典转换为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()
方法。
再见