标签:其他 小知识 java mes 命名空间 json2 string thread ret
首先普及一下小知识:
JSON 和 JS 对象互转
要实现从对象转换为 JSON 字符串,使用 JSON.stringify() 方法:
var json = JSON.stringify({a: ‘Vinkong‘, b: ‘Sky‘}); //结果是 ‘{"a": "Vinkong", "b": "Sky"}‘
要实现从 JSON 转换为对象,使用 JSON.parse() 方法:
var obj = JSON.parse(‘{"a": "Vinkong", "b": "Sky"}‘); //结果是 {a: ‘Vinkong‘, b: ‘Sky‘}
下面是提供Demo
建立一个Student类
using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; using System.Web.Script.Serialization; namespace ConsoleApplication1 { [DataContract]//DataContractJsonSerializer方式必须加的契约 class Student { private string Name; [DataMember]//DataContractJsonSerializer方式必须加的契约 [ScriptIgnore]//使用JavaScriptSerializer方式标记不序列化的属性 [JsonIgnore]//使用JSON.NET方式标记不序列化的属性 public string _Name { get { return Name; } set { Name = value; } } [DataMember] private int age; public int _Age { get { return age; } set { age = value; } } [DataMember] private string sex; public string _Sex { get { return sex; } set { sex = value; } } } }
测试代码编写:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Script.Serialization; using Newtonsoft.Json; using System.Runtime.Serialization; using System.Runtime.Serialization.Json; using System.IO; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { #region 第一种方式:使用JavaScriptSerializer方式 Student stu = new Student(); stu._Name = "vinkong"; stu._Age = 15; stu._Sex = "男"; JavaScriptSerializer jsonSerialize = new JavaScriptSerializer(); //使用JavaScriptSerializer方式需要引入的命名空间,这个在程序集System.Web.Extensions.dll.中 //using System.Web.Script.Serialization; //注:可用[ScriptIgnore] 标记不序列化的属性 //对象序列化对象 string strjson = jsonSerialize.Serialize(stu); //Json反序列化对象 stu = jsonSerialize.Deserialize<Student>(strjson); Console.WriteLine("1.使用JavaScriptSerializer方式"); Console.WriteLine("序列化:"+strjson); Console.WriteLine("反序列化:" + stu._Name + "" + " " + "" + stu._Age + "" + " " + " " + stu._Sex + ""); #endregion #region 使用JSON.NET方式 //使用Json.NET类库需要引入的命名空间 using Newtonsoft.Json; //注:可用[JsonIgnore]标记不序列化的属性 Student stu2 = new Student(); stu2._Name = "vinkong2"; stu2._Age = 15; stu2._Sex = "女"; //对象序列化Json string strjson2 = JsonConvert.SerializeObject(stu2); //Json反序列化对象 stu2 = JsonConvert.DeserializeObject<Student>(strjson2); Console.WriteLine("2.使用JSON.NET 方式"); Console.WriteLine("序列化:" + strjson2); Console.WriteLine("反序列化:" + stu2._Name + "" + " " + "" + stu2._Age + "" + " " + " " + stu2._Sex + ""); #endregion #region 使用DataContractJsonSerializer //使用DataContractJsonSerializer方式需要引入的命名空间,在System.Runtime.Serialization.dll.中。 // using System.Runtime.Serialization.Json; //实体中的契约[DataMember],[DataContract],是使用DataContractJsonSerializer序列化和反序列化必须要加的,对于其他两种方式可加可不加。 Student stu3 = new Student(); stu3._Name = "vinkong3"; stu3._Age = 22; stu3._Sex = "女"; string strjson3 = ""; //对象序列化Json using (MemoryStream stream = new MemoryStream()) { DataContractJsonSerializer jsonSerialize2 = new DataContractJsonSerializer(stu3.GetType()); jsonSerialize2.WriteObject(stream, stu3); strjson3 = Encoding.UTF8.GetString(stream.ToArray()); } //Json反序列化对象 using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(strjson3))) { DataContractJsonSerializer jsonSerialize3 = new DataContractJsonSerializer(typeof(Student)); stu3 = (Student)jsonSerialize3.ReadObject(stream); } Console.WriteLine("3.使用DataContractJsonSerializer 方式"); Console.WriteLine("序列化:" + strjson3); Console.WriteLine("反序列化:" + stu3._Name + "" + " " + "" + stu3._Age + "" + " " + " " + stu3._Sex + ""); Console.ReadKey(); #endregion } } }
尽量使用JSON.NET方式来序列化和反序列化,性能好。
标签:其他 小知识 java mes 命名空间 json2 string thread ret
原文地址:https://www.cnblogs.com/Vinkong/p/12599013.html