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;}
}
}
}