一、C#中JSON序列化有多种方式:
使用“DataContractJsonSerializer ”类时需要,
1、引用程序集 System.Runtime.Serialization 和 System.ServiceModel.Web
2、导入命名空间 System.Runtime.Serialization 和 System.Runtime.Serialization.Json
使用“JavaScriptSerializer ”类时需要,
1、引用程序集 System.Web.Extension
2、导入命名空间 System.Web.Script.Serialization
使用“JsonSerializer” 类时需要,
1、添加Newtonsoft.Json.dll文件引用
2、导入命名空间Newtonsoft.Json 和 Newtonsoft.Json.Linq。
3、其中的JsonSerializerSettings 类提供了多种情况选择。
二、弱类型 JSON 序列化
假设下面的JSON字符串:
{"personal": {"name": "Paul", "age": 23, "height": 1.7, "isSingle": true, "luckyNumbers": [5,17,21]}, "favoriteBands": ["Band ABC", "Band XYZ"]}
若要反序列化该对象,需指定[DataMember] 属性,如下类型所示:
[DataContract] public class MemberProfile { [DataMember] public PersonalInfo personal; [DataMember] public string[] favoriteBands; } [DataContract] public class PersonalInfo { [DataMember] public string name; [DataMember] public int age; [DataMember] public double height; [DataMember] public bool isSingle; [DataMember] public int[] luckyNumbers; }
三、上一个JsonHelper,供参考:
/// <summary> /// Json序列化和反序列化辅助类 /// </summary> public class JsonHelper { /// <summary> /// Json序列化 /// </summary> public static string JsonSerializer<T>(T obj) { string jsonString=string.Empty; try { DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T)); using (MemoryStream ms = new MemoryStream()) { serializer.WriteObject(ms, obj); jsonString = Encoding.UTF8.GetString(ms.ToArray()); } } catch { jsonString=string.Empty; } return jsonString; } /// <summary> /// Json反序列化 /// </summary> public static T JsonDeserialize<T>(string jsonString) { T obj = Activator.CreateInstance<T>(); try { using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString))) { DataContractJsonSerializer ser = new DataContractJsonSerializer(obj.GetType());//typeof(T) T jsonObject = (T)ser.ReadObject(ms); ms.Close(); return jsonObject; } } catch { return default(T); } } // 将 DataTable 序列化成 json 字符串 public static string DataTableToJson(DataTable dt) { if (dt == null || dt.Rows.Count == 0) { return """"; } JavaScriptSerializer myJson = new JavaScriptSerializer(); List<Dictionary<string, object>> list = new List<Dictionary<string, object>>(); foreach (DataRow dr in dt.Rows) { Dictionary<string, object> result = new Dictionary<string, object>(); foreach (DataColumn dc in dt.Columns) { result.Add(dc.ColumnName, dr[dc].ToString()); } list.Add(result); } return myJson.Serialize(list); } // 将对象序列化成 json 字符串 public static string ObjectToJson(object obj) { if (obj == null) { return string.Empty; } JavaScriptSerializer myJson = new JavaScriptSerializer(); return myJson.Serialize(obj); } // 将 json 字符串反序列化成对象 public static object JsonToObject(string json) { if (string.IsNullOrEmpty(json)) { return null; } JavaScriptSerializer myJson = new JavaScriptSerializer(); return myJson.DeserializeObject(json); } // 将 json 字符串反序列化成对象 public static T JsonToObject<T>(string json) { if (string.IsNullOrEmpty(json)) { return default(T); } JavaScriptSerializer myJson = new JavaScriptSerializer(); return myJson.Deserialize<T>(json); } }