你的位置:零度 > 更多发现 > JSON.NET与LINQ序列化示例教程
JSON.NET与LINQ序列化示例教程更多发现 admin 1个月前 (08-25) 350浏览
在上一篇博客中,我们演示了JSON.NET提供的最基础功能,这篇文章通过多个示例演示JSON.NET与LINQ的完美结合,让.NET操作JSON变得非常的简单,最后我们还会演示如何通过JSON.NET转换BSON数据、如何实现JSON格式与XML格式的互相转换,让您熟练在.NET中序列化对象。 1、手动创建JSON对象和数组
JSON格式主要包括对象和数组两种形式,在JSON.NET中分别用JArray和JObject表示,属性用JProperty表示,属性值用JValue表示,这些对象都直接或间接继承JToken抽象类,而且都有一个ToString方法,该方法用于直接输出元素的JSON字符串表示形式,我们可以通过JArray和JObject手动创建JSON并序列化,使用方式非常灵活。
(); array.Add("Manual text"); array.Add(new DateTime(2000, 5, 23)); (); o["MyArray"] = array; string json = o.ToString(); { "MyArray": [ "Manual text", "2000-05-23T00:00:00" ] } 2、用集合的方式初始化JArray数组和JObject对象 } } }; Console.WriteLine(o.ToString()); { "Cpu": "Intel", "Memory": 32, "Drives": [ "DVD", "SSD" ] } 3、使用动态类型dynamic类型创建JSON数组和对象C#中的动态类型dynamic允许开发者动态构造对象,这些动态构造的对象在运行时被解析执行,JSON.NET支持动态类型,无需定义类,即可构造JSON,这一些就像在JavaScript中编写一个对象那样简单,正是因为动态类型在运行时才被解析,所以,在开发工具中不能检查因书写而导致错误,这点一定要注意。
(); product.ProductName = "Elbow Grease"; product.Enabled = true; product.Price = 4.90m; product.StockCount = 9000; product.StockValue = 44100; product.Tags = ); Console.WriteLine(product.ToString()); { "ProductName": "Elbow Grease", "Enabled": true, "Price": 4.90, "StockCount": 9000, "StockValue": 44100, "Tags": [ "Real", "OnSale" ] } 4、使用JTokenWriter创建对象和数组 (); writer.WriteStartObject(); writer.WritePropertyName("name1"); writer.WriteValue("value1"); writer.WritePropertyName("name2"); writer.WriteStartArray(); writer.WriteValue(1); writer.WriteValue(2); writer.WriteEndArray(); writer.WriteEndObject(); )writer.Token; Console.WriteLine(o.ToString()); { "name1": "value1", "name2": [ 1, 2 ] } 5、使用对象创建JSON对象和数组JToken、JObject和JArray都提供一个名为FromObject的方法,允许通过一个对象来创建JSON对象。
Computer { Cpu = "Intel", Memory = 32, Drives = } }; .FromObject(computer); Console.WriteLine(o.ToString()); { "Cpu": "Intel", "Memory": 32, "Drives": [ "DVD", "SSD" ] } .FromObject(computer.Drives); Console.WriteLine(a.ToString()); [ "DVD", "SSD" ] 6、使用字符串创建JSON对象和数组 ; .Parse(json); Console.WriteLine(a.ToString()); [ "Small", "Medium", "Large" ] string json = @"{ CPU: 'Intel', Drives: [ 'DVD read/writer', '500 gigabyte hard drive' ] }"; .Parse(json); Console.WriteLine(o.ToString()); { "CPU": "Intel", "Drives": [ "DVD read/writer", "500 gigabyte hard drive" ] } 7、使用JToken转换JSON字符串在示例1中,我们已经说明JToken类型,它是JSON.NET的核心,几乎所有的JSON元素都继承于JToken抽象类,虽然JToken是抽象类,但它也提供一些很有用的基础方法,可以转换一段字符串并判断它应有的JSON类型。
); Console.WriteLine(t1.Type); // Object ); Console.WriteLine(t2.Type); // Array ); Console.WriteLine(t3.Type); // Null ); Console.WriteLine(t4.Type); // String 8、动态修改JSON对象和数组 string json = @"{ 'channel': { 'title': 'Star Wars', 'link': 'www.xcode.me', 'description': 'Star Wars blog.', 'obsolete': 'Obsolete value', 'item': [] } }"; .Parse(json); ]; channel[]).ToUpper(); channel[]).ToUpper(); channel.Property("obsolete").Remove(); channel.Property()); ]; item.Add("Item 1"); item.Add("Item 2"); Console.WriteLine(rss.ToString()); { "channel": { "title": "STAR WARS", "link": "www.xcode.com", "description": "STAR WARS BLOG.", "new": "New value", "item": [ "Item 1", "Item 2" ] } } 9、合并两个JSON对象 @"{ 'FirstName': 'John', 'LastName': 'Smith', 'Enabled': false, 'Roles': [ 'User' ] }"); @"{ 'Enabled': true, 'Roles': [ 'User', 'Admin' ] }"); o1.Merge(o2, .Union }); string json = o1.ToString(); { "FirstName": "John", "LastName": "Smith", "Enabled": true, "Roles": [ "User", "Admin" ] }