C#解析JSON字符串总结

JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串。

操作JSON通常有以下几种方式:

1. 原始方式:按照JSON字符串自己来解析。  

2. 通用方式【★★★★★】:这种方式是使用开源的类库Newtonsoft.Json(下载地址http://json.codeplex.com/)。下载后添加dll引用就能用。

首先添加引用:using Newtonsoft.Json;

新增:本地dll下载:Newtonsoft.Json.rar   引用:using Newtonsoft.Json;

1.Json字符串普通格式解析(常用)

1 string jsonText = "{\"zone\":\"海淀\",\"zone_en\":\"haidian\"}";
2 JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
3 string zone = jo["zone"].ToString();
4 string zone_en = jo["zone_en"].ToString();

其他写法:

  1. 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格式为C#类

1.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();

2.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类进行对象的序列化与反序列化,很直接。

1 Project p1 = new Project() { Input = "stone", Output = "gold" };
2 JavaScriptSerializer serializer = new JavaScriptSerializer();
3 string jsonStr = serializer.Serialize(p1);  //序列化:对象=>JSON字符串
4 Response.Write(jsonStr);
5 
6 Project p2 = serializer.Deserialize<Project>(jsonStr); //反序列化:JSON字符串=>对象
7 Response.Write(p1.Input + "=>" + p2.Output);

 

posted @ 2018-04-04 09:21  柒言·C  阅读(378)  评论(0编辑  收藏  举报