C#操作 JSON方法汇总
RestAPI中,经常需要操作json字符串, 需要把json字符串"反序列化"成一个对象,也需要把一个对象"序列化"成一字符串。
C#操作json, 比较简单。 本文介绍几种方法
步骤
Json字符串反序列化成对象共需要2步:
第一步:建立相应的实体类
第二步:调用方法把Json字符串"反序列化"成对象
了解json的语法
首先要了解json的语法,这样才能知道怎么创建实体类.
Json的语法很简单,就四条
数据在名称/值对中
数据由逗号分隔
花括号保存对象
方括号保存数组
创建实体类的例子
{"FirstName":"小坦克","LastName":"Tank","Age":30}
相应的实体类可以为
publicclassPerson { publicStringFirstName {get;set;} publicStringLastName {get;set;} publicintAge {get;set;} }
自动生成JSON的实体类
一个复杂的实体类,我们自己去写的话,可能需要1个小时以上。那有没有工具能直接生成实体类呢,这样能方便太多了。 当然有
http://jsonclassgenerator.codeplex.com/ ----开源的winform工具。
使用第三方工具Newtonsoft.Json.dll
优点: 使用非常方便. 看个例子就知道怎么用了
下载地址 https://www.nhooo.com/dll/Newtonsoft.Json.dll.html
代码示例:
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingNewtonsoft.Json; namespaceJsonDemo { classProgram { staticvoidMain(string[]args) { stringpersonJson="{'FirstName':'小坦克','LastName':'Tankxiao','Age':'30','Books':[{'BookName':'c#','Price':'29.9'},{'BookName':'Mac编程','Price':'39.9'}]}"; stringallMoveJson=@"[{'FirstName':'小坦克','LastName':'Tankxiao','Age':'30','Books':[{'BookName':'c#','Price':'29.9'},{'BookName':'Mac编程','Price':'39.9'}]},{ 'FirstName':'小坦克2','LastName':'Tankxiao2','Age':'40','Books':[{'BookName':'c#','Price':'29.9'},{'BookName':'Mac编程','Price':'39.9'}]}]"; //反序列化单个对象 PersononeMovie=JsonConvert.DeserializeObject<Person>(personJson); //反序列化对象集合 List<Person>allMovie=JsonConvert.DeserializeObject<List<Person>>(allMoveJson); Console.WriteLine(oneMovie.FirstName); Console.WriteLine(allMovie[1].FirstName); //序列化 stringafterJson=JsonConvert.SerializeObject(allMovie); } } publicclassPerson { publicStringFirstName {get;set;} publicStringLastName {get;set;} publicintAge {get;set;} publicList<Book>Books {get;set;} } publicclassBook { publicstringBookName {get;set;} publicstringPrice {get;set;} } }
最后我们来看个实例
usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingNewtonsoft.Json; namespaceTestJson { classProgram { staticvoidMain(string[]args) { stringjson="{\"a\":\"sadsad\",\"c\":{\"d\":\"adad\"}}"; //CCCccc=newCCC(); //ccc.d="adad"; //AAAaaa=newAAA(); //aaa.a="sadsad"; //aaa.b="dfgdg"; //aaa.c=ccc; AAAaaa=newAAA(); aaa=JavaScriptConvert.DeserializeObject<AAA>(json); //stringjson=JavaScriptConvert.SerializeObject(aaa); //Console.WriteLine(json); Console.Read(); } } publicclassAAA{ privatestringm_a; publicstringa { get{returnm_a;} set{m_a=value;} } privatestringm_b; publicstringb { get{returnm_b;} set{m_b=value;} } privateCCCm_c; publicCCCc { get{returnm_c;} set{m_c=value;} } } publicclassCCC { privatestringm_d; publicstringd { get{returnm_d;} set{m_d=value;} } } }