旅游网站设计策划书,恩施seo快速排名,襄阳网站制作公司有哪些,网站制作小图标序列化#xff08;Serialize#xff09;是将对象转换成字节流#xff0c;并将其用于存储或传输的过程#xff0c;主要用途是保存对象的状态#xff0c;以便在需要时重新创建该对象#xff1b;反序列化#xff08;Deserialize#xff09;则是将上面的字节流转换为相应对… 序列化Serialize是将对象转换成字节流并将其用于存储或传输的过程主要用途是保存对象的状态以便在需要时重新创建该对象反序列化Deserialize则是将上面的字节流转换为相应对象的过程在.Net阵营中Json.Net是由官方推荐的高性能开源序列化/反序列化工具其官方网站https://www.newtonsoft.com/json 一、将对象序列化为Json格式字符串 首先是正常的序列化操作对于给定的类private class MyClass{public int MyNum;public string MyStr;} 将该类的实例序列化为Json格式字符串首先引用命名空间Newtonsoft.JsonMyClass myClass new MyClass { MyNum 10, MyStr Hello World };Console.WriteLine(JsonConvert.SerializeObject(myClass)); 其打印结果{MyNum:10,MyStr:Hello World} 在打印到本地Log文件以供自己查看使用时可以选择转换为带有缩进的Json格式字符串Console.WriteLine(JsonConvert.SerializeObject(myClass, Formatting.Indented)); 此时打印结果为{MyNum: 10,MyStr: Hello World} 二、将Json格式字符串反序列化为对象 对于给定的字符串string jsonStr {MyNum: 10,MyStr: Hello World}; 将其反序列化为MyClass类型的对象MyClass myClass JsonConvert.DeserializeObjectMyClass(jsonStr);Console.WriteLine(myClass.MyStr); //Hello World 三、使用JObject动态序列化/反序列化 以上例子都是使用强类型进行序列化和反序列操作但有时也会用到不指定类型而直接操作Json格式数据的情况此时就需要用位于命名空间ewtonsoft.Json.Linq中的JObject类型的对象string jsonStr {MyNum: 10,MyStr: Hello World};JObject jObject JObject.Parse(jsonStr);Console.WriteLine(jObject.ToString(Formatting.None)); //{MyNum:10,MyStr:Hello World}//打印一条属性的值Console.WriteLine(jObject[MyStr].Valuestring()); //Hello World//添加一条属性jObject.Add(MyStr2, HaHa);//打印当前Json字符串Console.WriteLine(jObject.ToString(Formatting.None)); //{MyNum:10,MyStr:Hello World,MyStr2:HaHa} 四、定制化序列化/反序列过程 1.在C#中定制化的配置通常使用特性来完成这里也不例外例如简单的在序列化/反序列时忽略某个字段/属性private class MyClass{ [JsonIgnore]public int MyNum;public string MyStr;} 此时无论序列化还是反序化时字段MyNum都不再参与这些过程 2.自定义某个字段/属性的序列化/反序列化规则 当接收到的Json格式字符串与本地已有类型不统一时需要进行自定义的反序列化过程反之亦然例如Json字符串中以字符串TRUE表示布尔类型true不自定义这个过程依然走的通只是以此举例以字符串FALSE表示布尔类型false时需要自定义如下/// summary/// 自定义布尔类型数据转换规则/// /summarypublic class MyBoolConverter : JsonConverter{private const string TrueStr TRUE;private const string FalseStr FALSE;public override bool CanConvert(Type objectType) true;//反序列化public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {if (reader.ValueType typeof(string)) {if ((string)reader.Value TrueStr) {return true; }else {return false; } }return false; }//序列化public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {if (value.GetType() typeof(bool)) {bool result (bool)value;if (result) { writer.WriteValue(TrueStr); }else { writer.WriteValue(FalseStr); } } }} 然后在需要操作的类型定义中的字段/属性中加入该特性private class MyClass{ [JsonConverter(typeof(MyBoolConverter))]public bool MyBool;} 此时string jsonStr {MyBool: TRUE};MyClass1 myClass JsonConvert.DeserializeObjectMyClass1(jsonStr);Console.WriteLine(myClass.MyBool); //TrueConsole.WriteLine(JsonConvert.SerializeObject(myClass)); //{MyBool:TRUE}如果您觉得阅读本文对您有帮助请点一下“推荐”按钮您的认可是我写作的最大动力原文地址https://www.cnblogs.com/minotauros/p/10918772.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com