时间:2022-06-02 10:04:09 | 栏目:.NET代码 | 点击:次
System.Web.Script.Serialization空间,位于System.Web.extensions.dll中。
JavaScriptSerializer jss = new JavaScriptSerializer(); Console.WriteLine(jss.MaxJsonLength); //默认接受最大的长度是 2097152 这个是接受JSON字符串的最大长度,超长会有什么后果呢?试下 Person p = new Person(1, "关羽", 21); //序列化 string json = jss.Serialize(p); Console.WriteLine(json); //输出 {"Id":1,"Name":"关羽","Age":21}`这就是Json格式了 //反序列化:1、Deserialize泛型写法 Person p2 = jss.Deserialize("{\"Id\":1,\"Name\":\"关羽\",\"Age\":21}"); Console.WriteLine(p2.Id + " " + p2.Name + " " + p2.Age); //输出 1 关羽 21 //反序列化:2、Deserialize的非泛型写法 Person p3 = jss.Deserialize("{\"Id\":1,\"Name\":\"关羽\",\"Age\":21}", typeof(Person)) as Person; //注意这个方法返回的是object类,因此要强制转换成Person类 Console.WriteLine(p3.Id + " " + p3.Name + " " + p3.Age); //同样输出 1 关羽 21 //反序列化:3、将Json字符转换为Object类型 object obj = jss.DeserializeObject("{\"Id\":1,\"Name\":\"关羽\",\"Age\":21}"); Person p4 = jss.ConvertToType(obj); Console.WriteLine(p4.Name); Person p5 = jss.ConvertToType(obj, typeof(Person)) as Person; Console.WriteLine(p5.Name); public class Person { public Person() { } public Person(int id, string name, int age) { this.Id = id; this.Name = name; this.Age = age; } public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } }
System.Runtine.Serialization命名空间中,位于System.Runtine,Serialization.dll中。
void Main() { DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Person)); //最常用的两个方法 //反序列化 string str = "{\"Id\":1,\"Name\":\"刘备\",\"Age\":\"23\"}"; Person p; using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(str))) //构造函数能够接受Stream参数,因此你可以用内存流,文件流等等创建 { p = serializer.ReadObject(ms) as Person; } Console.WriteLine(p.Name); //输出刘备 //反序列化 Person p2 = new Person(2, "关羽", 23); byte[] byteArr; using (MemoryStream ms = new MemoryStream()) { serializer.WriteObject(ms, p2); byteArr = ms.ToArray(); } Console.WriteLine(Encoding.UTF8.GetString(byteArr)); //输出 {"Age":23,"Id":1,"Name":"关羽"} } [DataContract] //对于使用DataContractJsonSerializer类而言,该属性是必须的 public class Person { public Person(int id, string name, int age) { Id = id; Age = age; Name = name; } [DataMember] //对于使用DataContractJsonSerializer类而言,该属性是必须的 public int Id { get; set; } [DataMember] public string Name { get; set; } [DataMember] public int Age { get; set; } }
https://www.newtonsoft.com/json
Json.Net介绍://www.jb51.net/article/247911.htm
System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer(); List list = new List(); list.Add(new Student() { age = 10, date = DateTime.Now, name = "宋兴柱 是个好孩\"子,这里\"有英文逗号" }); var str = js.Serialize(list); str = Regex.Replace(str, @"\\/Date\((\d+)\)\\/", match => { DateTime dt = new DateTime(1970, 1, 1); dt = dt.AddMilliseconds(long.Parse(match.Groups[1].Value)).ToLocalTime(); return dt.ToString("yyyy-MM-dd HH:mm:ss"); });
原本内容:[{"age":10,"date":"\/Date(1404098342309)\/","name":"宋兴柱 是个好孩\"子,这里\"有英文逗号"}]
显示结果:[{"age":10,"date":"2014-06-30 11:22:15","name":"宋兴柱 是个好孩\"子,这里\"有英文逗号"}]
IsoDateTimeConverter dtConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy'年'MM'月'dd'日'" }; string json = JsonConvert.SerializeObject(jack, dtConverter);
接收json数据,日期格式为:"\/Date(1414078309687)\/"
var value = "/Date(1414078309687)/"; var da = eval('new ' + value.replace('/', '', 'g')); //或者 var da = value.replace(/\/Date\((\d+)\)\//gi, '$1'); ////通过正则拿到里面数。g 全局 i不区分大小写 da.toLocaleDateString() //2014/10/23 da.toLocaleTimeString() //下午11:31:49
性能对比:
功能对比:
特性 | Json.Net | DataContractJsonSerializer | JavaScriptSerializer |
---|---|---|---|
Json | 支持 | 支持 | 支持 |
Bson | 支持 | 不支持 | 不支持 |
Json Schema | 支持 | 不支持 | 不支持 |
.Net 2.0 | 支持 | 不支持 | 不支持 |
.Net 3.5 | 支持 | 支持 | 支持 |
.Net 4.0 | 支持 | 支持 | 支持 |
Silverlight | 支持 | 支持 | 不支持 |
Windows Phone | 支持 | 支持 | 不支持 |
Windows 8 Metro | 支持 | 支持 | 不支持 |
Linq to Json | 支持 | 不支持 | 不支持 |
Indented Json(有换行格式的Json) | 支持 | 不支持 | 不支持 |
Json和XML转换 | 支持 | 不支持 | 不支持 |
序列化DataTable和DataSet | 支持 | 不支持 | 不支持 |
序列化Entity Framework | 支持 | 不支持 | 不支持 |