C# 序列化与非序列化
2023.1.5
参考实体类:Customer
public class Customer { public int Unid { get; set; } public string CustomerName { get; set; } }
(一)反序列化,用于将对象转换为 JSON 字符串
public string ScriptSerialize(Customer customer) { JavaScriptSerializer js = new JavaScriptSerializer(); return js.Serialize(customer); }
Customer cc = new Customer { Unid = 1, CustomerName = "John" }; string strJson = ScriptSerialize(cc); Console.WriteLine(strJson);
(二)反序列化,将JSON 字符串转换为对象
public Customer ScriptDeserialize(string strJson) { JavaScriptSerializer js = new JavaScriptSerializer(); return js.Deserialize<Customer>(strJson); }
Customer c1 = ScriptDeserialize(strJson); Console.WriteLine(c1.Unid + " " + c1.CustomerName);
(三)方法泛型
public string ScriptSerialize<T>(T t) { JavaScriptSerializer js = new JavaScriptSerializer(); return js.Serialize(t); } public T ScriptDeserialize<T>(string strJson) { JavaScriptSerializer js = new JavaScriptSerializer(); return js.Deserialize<T>(strJson); }
Customer cc = new Customer { Unid = 1, CustomerName = "John" }; string strJson = ScriptSerialize<Customer>(cc); Console.WriteLine(strJson); Customer c1 = ScriptDeserialize<Customer>(strJson); Console.WriteLine(c1.Unid + " " + c1.CustomerName);
JsonConvert
public class Person { /// <summary> /// 名称 /// </summary> public string pName; /// <summary> /// 年龄 /// </summary> public int pAge; /// <summary> /// 性别 /// </summary> public string pSex; }
// 声明一个Person对象,并赋值 Person p1 = new Person(); p1.pName = "张三"; p1.pAge = 18; p1.pSex = "男"; // 输出类型 Console.WriteLine("输出p1类型:{0}" + "\n",p1.GetType()); // 转换成JSON字符串 var str = JsonConvert.SerializeObject(p1); Console.WriteLine("输出转换后的值:{0}" + "\n" + "转换后的类型:{1} " + "\n", str,str.GetType()); // 使用反序列化到指定Person类型 var pStr = JsonConvert.DeserializeObject<Person>(str); Console.WriteLine("接受后的Name:{0}" + "\n" + "反序列后的类型:{1} " + "\n", pStr.pName, pStr.GetType()); Console.ReadKey();
将字典类型序列化为json字符串
/// <summary> /// 将字典类型序列化为json字符串 /// </summary> /// <typeparam name="TKey">字典key</typeparam> /// <typeparam name="TValue">字典value</typeparam> /// <param name="dict">要序列化的字典数据</param> /// <returns>json字符串</returns> public static class JsonUntity { public static string SerializeDictionaryToJsonString<TKey, TValue>(Dictionary<TKey, TValue> dict) { if (dict.Count == 0) return ""; string jsonStr = JsonConvert.SerializeObject(dict); return jsonStr; } /// <summary> /// 将json字符串反序列化为字典类型 /// </summary> /// <typeparam name="TKey">字典key</typeparam> /// <typeparam name="TValue">字典value</typeparam> /// <param name="jsonStr">json字符串</param> /// <returns>字典数据</returns> public static Dictionary<TKey, TValue> DeserializeStringToDictionary<TKey, TValue>(string jsonStr) { if (string.IsNullOrEmpty(jsonStr)) return new Dictionary<TKey, TValue>(); Dictionary<TKey, TValue> jsonDict = JsonConvert.DeserializeObject<Dictionary<TKey, TValue>>(jsonStr); return jsonDict; } }
JSON序列化
/// <summary> /// JSON序列化 /// </summary> public string JsonSerializer<T>(T t) { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); MemoryStream ms = new MemoryStream(); ser.WriteObject(ms, t); string jsonString = Encoding.UTF8.GetString(ms.ToArray()); ms.Close(); return jsonString; }
Json数据反序列化为Dictionary并根据关键字获取指定的值
Json数据:
{ "dataSet": { "header": { "returnCode": "0", "errorInfo": "HTTP请求错误", "version": "V1.0R010", "totalRows": "2000", "returnRows": "20" }, "fieldDefine": { "assetId": "string", "serverIdcId": "int", "inputTime": "datetime" }, "data": { "row": [ { "AssetId": "TCNS2006888", "ServerIdcId": "1", "InputTime": "2008-12-12" }, { "AssetId": "TCNS2006889", "ServerIdcId": "2", "InputTime": "2008-1-1" } ] } } }
将json数据转成dictionary:
/// <summary> /// 将json数据反序列化为Dictionary /// </summary> /// <param name="jsonData">json数据</param> /// <returns></returns> private Dictionary<string, object> JsonToDictionary(string jsonData) { //实例化JavaScriptSerializer类的新实例 JavaScriptSerializer jss = new JavaScriptSerializer(); try { //将指定的 JSON 字符串转换为 Dictionary<string, object> 类型的对象 return jss.Deserialize<Dictionary<string, object>>(jsonData); } catch (Exception ex) { throw new Exception(ex.Message); } }
使用方法:
private void button1_Click(object sender, EventArgs e) { //Json数据 string json = "{\"dataSet\":{\"header\":{\"returnCode\":\"0\",\"errorInfo\":\"HTTP请求错误\",\"version\":\"V1.0R010\",\"totalRows\":\"2000\",\"returnRows\":\"20\"},\"fieldDefine\":{\"assetId\":\"string\",\"serverIdcId\":\"int\",\"inputTime\":\"datetime\"},\"data\":{\"row\":[{\"AssetId\":\"TCNS2006888\",\"ServerIdcId\":\"1\",\"InputTime\":\"2008-12-12\"},{\"AssetId\":\"TCNS2006889\",\"ServerIdcId\":\"2\",\"InputTime\":\"2008-1-1\"}]}}}"; Dictionary<string, object> dic = JsonToDictionary(json);//将Json数据转成dictionary格式 Dictionary<string, object> dataSet=(Dictionary<string, object>)dic["dataSet"]; //使用KeyValuePair遍历数据 foreach (KeyValuePair<string, object> item in dataSet) { if (item.Key.ToString() == "header")//获取header数据 { var subItem=(Dictionary<string,object>)item.Value; foreach (var str in subItem) { textBox1.AppendText(str.Key + ":" + str.Value+"\r\n");//显示到界面 } break; } } }
--
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix