c#解析json字符串处理清晰易懂的⽅法JSON⽂件读取到内存中就是字符串,.NET操作JSON就是⽣成与解析JSON字符串。
操作JSON通常有以下⼏种⽅式:
1. 原始⽅式:按照JSON字符串⾃⼰来解析。
⾸先添加引⽤:using Newtonsoft.Json;
新增:本地dll下载:  引⽤:using Newtonsoft.Json;
1.Json字符串普通格式解析(常⽤)
string jsonText = "{\"zone\":\"海淀\",\"zone_en\":\"haidian\"}";
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
string zone = jo["zone"].ToString();
string zone_en = jo["zone_en"].ToString();
其他写法:
int retCode = -1;//返回码,0表⽰成功,其他表⽰失败
string returnMessage = string.Empty;//返回消息,对返回码的描述
string jsonStr = "{\"RetCode\":3,\"ReturnMessage\":\"测试消息\"}";
JavaScriptObject jsonObj = JavaScriptConvert.DeserializeObject<JavaScriptObject>(jsonStr);
if (jsonObj != null)
{
if (jsonObj.ContainsKey("RetCode") && jsonObj["RetCode"] != null)
{
int.TryParse(jsonObj["RetCode"].ToString(), out retCode);
}
if (jsonObj.ContainsKey("ReturnMessage") && jsonObj["ReturnMessage"] != null)
{
returnMessage = jsonObj["ReturnMessage"].ToString();
}
}
解析Josn列表数据:
public static JArray GetData2JArray(string url, string key)
{
string jsonData = HttpHelper.HttpGet(url, "", "gb2312");
JObject obj = JObject.Parse(jsonData);
return (JArray)obj[key];
}
以上Json的返回的数据:
{"Pictures":
[
{"PictureSrc":"i.ssimg/ssupload/2016/10/17/707f464645f44b4cb9882b75d23ed8f9.png","PictureLink":"","PictureAlt":"通光线缆 36.50%","PictureTitle":"实盘{"PictureSrc":"i.ssimg/ssupload/2016/10/17/4c38b0a2604e49beaf1e4f7885e6a1a4.png","PictureLink":"","PictureAlt":"天际股份 6.38%","PictureTitle":"证券]
}
解析成⾃定义实体类列表:
#region 获取⼿编列表
/// <summary>
/
// 获取⼿编列表
/// </summary>
/// <returns></returns>
public static List<Pictures> GetHandWriteList()
{
List<Pictures> list = new List<Pictures>();
var data = Common.LiveCastUserManageAPI.GetData2JArray(CmsApiSite, "Pictures");
if (data != null && data.Count > 0)
{
foreach (var item in data)
{
Pictures p = new Pictures();
if (!string.IsNullOrEmpty(item["PictureSrc"].ToString()))
安卓在线解析json{
p.PictureSrc = item["PictureSrc"].ToString();
}
list.Add(p);
}
}
return list;
}
#endregion
Pictures实体类的定义:
JSON⽣成实体类⼯具:
参考:
解析JsonArrayList
2.Json字符串嵌套格式解析
string jsonText = "{\"beijing\":{\"zone\":\"海淀\",\"zone_en\":\"haidian\"}}";
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
string zone = jo["beijing"]["zone"].ToString();
string zone_en = jo["beijing"]["zone_en"].ToString();
3.Json字符串数组格式解析
string jsonArrayText = "[{'a':'a1','b':'b1'},{'a':'a2','b':'b2'}]"; //"[{'a':'a1','b':'b1'}]即使只有⼀个元素,也需要加上[]
string jsonArrayText = "[{\"a\":\"a1\",\"b\":\"b1\"},{\"a\":\"a2\",\"b\":\"b2\"}]";  //上⾯写法和此写法效果⼀样
JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonArrayText);//jsonArrayText必须是带[]数组格式字符串
string str = jArray[0]["a"].ToString();
3. 内置⽅式:使⽤.NET Framework 3.5/
4.0中提供的System.Web.Script.Serialization命名空间下的JavaScriptSerializer类进⾏对象的序列化与反序列化,很直接。
Project p1 = new Project() { Input = "stone", Output = "gold" };
JavaScriptSerializer serializer = new JavaScriptSerializer();
string jsonStr = serializer.Serialize(p1);  //序列化:对象=>JSON字符串
Response.Write(jsonStr);
Project p2 = serializer.Deserialize<Project>(jsonStr); //反序列化:JSON字符串=>对象
Response.Write(p1.Input + "=>" + p2.Output);
  注意:如果使⽤的是VS2010,则要求当前的⼯程的 Target Framework要改成.Net Framework 4,不能使⽤Client Profile。当然这个System.Web.Extensions.dll主要是Web使⽤的,直接在Console⼯程中⽤感觉有点浪费资源。
  此外,从最后⼀句也可以看到,序列化与反序列化是深拷贝的⼀种典型的实现⽅式。
备注:
json格式字符串转换为实体类,⼤括号{}表⽰对象,[]数组表⽰列表。
//*******************
需求:
假设有如下json字符串:
{
"companyID": "15",
"employees": [
{
"firstName": "Bill",
"lastName": "Gates"
},
{
"firstName": "George",
"lastName": "Bush"
}
],
"manager": [
{
"salary": "6000",
"age": "23"
},
{
"salary": "8000",
"age": "26"
}
]
}
请利⽤C#处理这个字符串,在控制台显⽰出公司的ID,第⼀位员⼯的姓,和所有管理者的⼯资。
解决步骤:
(为了更清晰的说明,本例在控制台中测试,本⼈编程环境VS2015)
// 20190105更新,之前这个⽹站是直接⼀个⼤按钮下载dll的,好像现在变复杂了2333,也可以去⾥⾯的github-release链接⾥,下载最新压缩包json-xxx.zip,解压到⾃⼰对应的版本的Newtonsoft.Json.dll
2、在VS中新建项⽬——控制台应⽤程序。
3、引⽤类库:在VS中点击:项⽬——引⽤——浏览——到你刚才下载的Newtonsoft.Json.dll——确定。
4、在主程序Program.cs的开头添加 using Newtonsoft.Json;  这⼀语句。
把这部分内容复制,粘贴到class Program类的下⽅。
将我刚才给的东西复制进去点击“压缩并转义”,得到的值可以直接赋值给⼀个string变量,如图:
PS:如果能从别的地⽅⽐如webAPI得到json字符串那更好,直接赋值给⼀个string变量后进⾏下⾯的操作,省去了转义这⼀步。string jsonText = " {\"companyID\":\"15\",\"employees\":[{\"firstName\":\"Bill\",\"lastName\":\"Gates\"}, {\"firstName\":\"George\",\"lastName\":\"Bush\"}],\"manager\":[{\"salary\":\"6000\",\"age\":\"23\"},
{\"salary\":\"8000\",\"age\":\"26\"}]}  ";
7、反序列化json字符串得到对象。
RootObject rb = JsonConvert.DeserializeObject<RootObject>(jsonText);
8、处理对象,如输出公司ID:
Console.WriteLine(rbpanyID);
完整代码如下(引⽤NewtonSoft.Json.dll后可直接运⾏):

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。