C#中json格式数据反序列化为Dictionary
需求:从web.config中读取配置节点,经过C#代码处理后显示在前台页面上去,如下图所示:
目的是实现英文缩写加上他的中文描述。
解决方案:
1.存入数据库,存数据库读取然后拼凑字符串(不做讨论)
2.从web.config中读取,存入时存入两行,读两次,然后对应拼凑字符串然后绑定。(不做讨论)
3.从web.config中读取,直接在web.config中存入json格式的数据,读取后经过反序列化后存入Dictionary<string,string>里面,然后进行遍历拼凑。
web.config存放样例:
C# 反序列化代码:在一个单独的类库里里面
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Web; 6 using System.Runtime.Serialization; 7 using System.Configuration; 8 using System.Runtime.Serialization.Json; 9 using System.IO; 10 11 namespace Lib 12 { 13 public class jsonHelper 14 { 15 public static Dictionary<string, string> getJson(string jsonString) 16 { 17 DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Dictionary<string, string>)); 18 MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)); 19 Dictionary<string, string> jsonObject = (Dictionary<string, string>)ser.ReadObject(ms); 20 return jsonObject; 21 } 22 } 23 }
调用代码:Default.aspx页面
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Configuration; 7 using System.Web.UI.WebControls; 8 9 using Lib; 10 11 public partial class _Default : System.Web.UI.Page 12 { 13 protected void Page_Load(object sender, EventArgs e) 14 { 15 //从web.config获取json格式数据 16 string jsonText = ConfigurationManager.AppSettings["IOType"].ToString(); 17 18 Dictionary<string, string> json = json = jsonHelper.getJson(jsonText); 19 20 //遍历拼凑绑定 21 foreach (KeyValuePair<string, string> Kvalue in json) 22 { 23 ddlIOType.Items.Add(new ListItem(Kvalue.Key + " (" + Kvalue.Value+")",Kvalue.Key)); 24 } 25 } 26 }
显示效果:
注意的地方:
在定义web.config里面的Json的数据时要特别在意,要想反序列化为字典存储,就必须加上Key和Value少了Key和Value不能反序列化成功。
另外需要注意的一点就是json数据的格式,尤其是引号,如果你在程序中定义json格式数据的时候需要在引号前加上转义符才行,如下面的格式:
1 string strJsonText="[{\"Key\":\"USD\",\"Value\":\"美元\"},{\"Key\":\"GBP\",\"Value\":\"英镑\"},{\"Key\":\"EUR\",\"Value\":\"欧元\"}]";
过如向web.config中那样定义,转义符不用自己加,编译器在做转化时帮我们自己添加了。
不抛弃,不放弃