C# 采用正则方式实现文本键值对与泛型字典Dictionary<string,string>相互转换
作者: 张赐荣
在开发过程中经常会遇到想将文本型字典Dictionary<string,string>转换为文本键值对进行保存,或者想要把已经保存的文本键值对还原回文本字典。
以下两个C#方法实现了文本字典转换为字符串文本及字符串文本键值对还原成字典的功能。
注:进行Base64编码是为了防止字符干扰正则匹配。
public static string DictionaryToStringData (Dictionary<string,string> dict) // 将文本型字典转换为键值对文本 {k=v} 格式,转换失败返回空文本
{
StringBuilder sb = new StringBuilder();
foreach (var item in dict)
{
sb.Append("{\""+Convert.ToBase64String(Encoding.Default.GetBytes(item.Key))+"\"=\""+Convert.ToBase64String(Encoding.Default.GetBytes(item.Value))+"\"}\n");
}
return (sb.ToString());
}
public static Dictionary<string,string> StringDataToDictionary (string data) // 将文本键值对 {k=v} 转换为文本型字典,转换失败返回 null
{
System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex("\\{\"(.+?)\"=\"(.+?)\"\\}", System.Text.RegularExpressions.RegexOptions.IgnoreCase|System.Text.RegularExpressions.RegexOptions.Multiline);
System.Text.RegularExpressions.MatchCollection mc = regex.Matches(data);
if (mc.Count < 1)
{
return (null);
}
Dictionary<string, string> kv = new Dictionary<string, string>();
foreach (System.Text.RegularExpressions.Match item in mc)
{
kv.Add(Encoding.Default.GetString(Convert.FromBase64String(item.Groups[1].Value)),Encoding.Default.GetString(Convert.FromBase64String(item.Groups[2].Value)));
}
return (kv);
}