当前位置: 首页 > 科技观察

NET流行的高性能JSON框架Json.NET

时间:2023-03-15 15:08:25 科技观察

本文转载自微信公众号《UP科技控》,作者conan5566。转载本文请联系UP技控公众号。在日常编程中,经常会用到Json来进行数据交互。好在.Net平台下有很多开源的Json库,可以让我们更方便快捷的处理各种复杂的Json。其中,Newtonsoft库是一个流行的.NET高性能JSON库。框架特性工具VS2010+Newtonsoft库从NuGet下载合适的Newtonsoft.Json库1.在需要引用Newtosoft.Json的项目上,点击鼠标右键管理Nuget包,打开项目包管理器。2.在包管理器中输入关键字“Json”,看到库Newtosoft.Json。点击右下角的箭头完成安装。示例1,序列化JSON-序列化和反序列化JSON、序列化程序设置和序列化属性}Accountaccount=newAccount{Email="james@example.com",Active=true,CreatedDate=newDateTime(2013,1,20,0,0,0,DateTimeKind.Utc),Roles=newList{"用户","Admin"}};stringjson=JsonConvert.SerializeObject(account,Formatting.Indented);//{//"Email":"james@example.com",//"Active":true,//"CreatedDate":"2013-01-20T00:00:00Z",//"角色":[//"用户",//"管理员"//]//}Console.WriteLine(json);2.LINQtoJSON——解析、查询、修改和写入JSONJArrayarray=newJArray();array.Add("Manualtext");array.Add(newDateTime(2000,5,23));JObjecto=newJObject();o["MyArray"]=array;stringjson=o.ToString();//{//"MyArray":[//"Manualtext",//"2000-05-23T00:00:00"//]//}3.JSONSchema-加载模式并验证JSON请注意,JSONSchema验证已移至其自身的包中。有关详细信息,请参阅https://www.newtonsoft.com/jsonschema。JObjecto=JObject.Parse(@"{'Stores':['LambtonQuay','WillisStreet'],'制造商':[{'Name':'AcmeCo','Products':[{'Name':'Anvil','价格':50}]},{'名称':'Contoso','产品':[{'名称':'ElbowGrease','价格':99.95},{'名称':'HeadlightFluid','Price':4}]}]}");stringname=(string)o.SelectToken("Manufacturers[0].Name");Console.WriteLine(name);//AcmeCodecimalproductPrice=(decimal)o.SelectToken("Manufacturers[0].Products[0].Price");Console.WriteLine(productPrice);//50stringproductName=(string)o.SelectToken("Manufacturers[1].Products[0].Name");Console.WriteLine(productName);//ElbowGrease4、转换XML-将JSON转换为XML和XML转换为JSONstringjson=@"{'@Id':1,'Email':'james@example.com','Active':true,'CreatedDate':'2013-01-20T00:00:00Z','Roles':['User','Admin'],'Team':{'@Id':2,'Name':'SoftwareDevelopers','Description':'Creatorsoffinesoftwareproductsandservices.'}}";XNodenode=JsonConvert.DeserializeXNode(json,"Root");控制台.WriteLine(node.ToString());////james@example.com//true//2013-01-20T00:00:00Z//User//Admin////SoftwareDevelopers//Creatorsoffinesoftwareproductsandservices.////5、BSON-序列化和反序列化BSONpublicclassEvent{publicstringName{get;set;}publicDateTimeStartDate{get;set;}}Evente=newEvent{Name="MoviePremiere",StartDate=newDateTime(2013,1,22,20,30,0,DateTimeKind.Utc)};MemoryStreamms=newMemoryStream();使用(BsonWriterwriter=newBsonWriter(ms)){JsonSerializerserializer=newJsonSerializer();serializer.Serialize(writer,e);}stringdata=Convert.ToBase64String(ms.ToArray());Console.WriteLine(data);//MQAAAAJOYW1lAA8AAABNb3ZpZSBQcmVtaWVyZQAJU3RhcnREYXRlAED982M8AQAAAA==6、读J和写入ON-使用JsonTextReader读取JSON,使用JsonTextWriter写入JSONstringjson=@"{'CPU':'Intel','PSU':'500W','Drives':['DVDread/writer'/*(broken)*/,'500gigabyteharddrive','200gigabyteharddrive']}";JsonTextReaderreader=newJsonTextReader(newStringReader(json));while(reader.Read()){if(reader.Value!=null){Console.WriteLine("Token:{0},Value:{1}",reader.TokenType,reader.Value);}else{Console.WriteLine("Token:{0}",reader.TokenType);}}//Token:StartObject//Token:PropertyName,Value:CPU//Token:String,Value:Intel//Token:PropertyName,Value:PSU//Token:String,Value:500W//Token:PropertyName,Value:Drives//Token:StartArray//Token:String,Value:DVDread/writer//Token:Comment,Value:(broken)//Token:String,Value:500gigabyteharddrive//Token:String,Value:200gigabyteharddrive//Token:EndArray//Token:EndObject更多功能见https//github.com/JamesNK/Newtonsoft.Json