C# 后台解析json,簡單方法 字符串序列化為對象,取值


如果后台是一個JSON的字符串格式如下:

string str = "{\"Success\":true,\"Msg\":\"成功!\"}";

我們之間轉成dynamic然后獲取里面某個屬性即可。

dynamic response = Newtonsoft.Json.JsonConvert.DeserializeObject(str);

string a = response.Success; string b = response.Msg;

還有兩種較為復雜的方法:

 Data data1 = JsonConvert.DeserializeObject<Data>(str);獲取就直接:data1.Success。

或者:List<Data> list = JsonConvert.DeserializeObject<List<Data>>(str);獲取需要循環獲取:foreach (var item in list)
            {
                 item.Success
            }

但是以上2個方法都需要聲明類

public class Data
    {
        public string Success { get; set; }
        public string Msg { get; set; }
    }

 

 

 

如果后台穿過來是一個Json(new { success = response.Success, msg = response.Msg }, JsonRequestBehavior.AllowGet);格式;直接轉成dynamic 格式。獲取: resulOb.Data.success。

 

--------------題外話

其實也可以用這種方式直接傳給前台:

public JsonResult projectPush(){

Json(new { success = false, msg = "成功!" }, JsonRequestBehavior.AllowGet);

}

前台獲取的時候直接:var result = Ext.decode(repsonse.responseText);result.success即可。當然這個是基於EXT的。你可以返回之后調適一下其他框架下的。

--------------------------------------------------------------------------------------------------------     分割線    ------------------------------------------------------------------------------------------------------------------------------------------

Newtonsoft.Json在json和對象之間轉化是一個非常強大的工具。

對象轉化json字符串

Newtonsoft.Json.JsonConvert.SerializeObject()

json字符串轉化為指定對象

 Newtonsoft.Json.JsonConvert.DeserializeObject<>()

json字符串直接獲取指定元素值(類似XML)

var jObject=JObject.Parse(jsonstring); var time= jObject["time"].ToString();//獲取time{"time":"2016-06-06 11:11:11"}

 xml轉換json字符串

XmlDocument doc = new XmlDocument(); doc.LoadXml(PostBackXml); var jObject = Newtonsoft.Json.JsonConvert.SerializeXmlNode(doc);//Xml轉json

 當上面的XML在序列化是通常會出現根目錄,根目錄內出現的才是需要序列化的對象元素。

不妨先轉換為JObject,像下面這樣使用jobj["MongoTask"]轉換

 var json=JsonConvert.SerializeXmlNode(item); var jobj = JsonConvert.DeserializeObject<JObject>(json); tasklist.Add(jobj["MongoTask"].ToObject<MongoTask>());

 如果需要獲取XML中屬性的值,比如獲取<user name='張三'>獲取張三時name屬相帶有@符號

代碼中過濾到@符號就可以正常取值

var jobj = Newtonsoft.Json.JsonConvert.DeserializeObject<JObject>(jObject.Replace("@","")); var name= jobj["Response"]["Body"]["OrderResponse"]["name"];

 

小結:

1:直接解析字符串
var jObject=JObject.Parse(jsonstring); var time= jObject["time"].ToString();//獲取time{"time":"2016-06-06 11:11:11"}

2:通過轉成dynamic然后獲取里面某個屬性即可。

dynamic response = Newtonsoft.Json.JsonConvert.DeserializeObject(str);

string a = response.Success; string b = response.Msg;

3:先構造一個對象,再將json字符串轉型為對象,獲取它的屬性
================================================================================

1)使用JObject讀寫字符串:

JObject jo = JObject.Parse(jsonText);
string[] values = jo.Properties().Select(item => item.Value.ToString()).ToArray();
 
        

(2)使用JsonSerializer讀寫對象(基於JsonWriter與JsonReader): 

數組型數據

復制代碼
復制代碼
string jsonArrayText1 = "[{'a':'a1','b':'b1'},{'a':'a2','b':'b2'}]";
JArray ja = (JArray)JsonConvert.DeserializeObject(jsonArrayText1);
string ja1a = ja[1]["a"].ToString();
//或者
JObject o = (JObject)ja[1];
string oa = o["a"].ToString();
復制代碼
復制代碼

嵌套格式

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM