在定義好了對象的類型后,通過NewtonJson我們可以方便的對一個對象進行序列化和反序列化。
在對象里面的屬性不好定義,或者不好確定的情況下,我們也可以直接把我們要反序列化的對象當做Objcet處理,但是這樣后續的操作就十分的不變,比如你要使用對象里面的某個屬性的時候
通過JObject和JArray來動態解析JSON對象,使它很容易創建和檢索的JSON內容而無需基礎類型
private string str = "{\"platform\":\"all\",\"audience\":{\"tag\":[\"深圳\",\"北京\"]},\"notification\":{\"android\":{\"alert\":\"Hi, JPush!\",\"title\":\"Send to Android\",\"builder_id\":1,\"extras\":{\"newsid\":321}},\"ios\":{\"alert\":\"Hi, JPush!\",\"sound\":\"default\",\"badge\":\"+1\",\"extras\":{\"newsid\":321}}},\"message\":{\"msg_content\":\"Hi,JPush\",\"content_type\":\"text\",\"title\":\"msg\",\"extras\":{\"key\":\"value\"}},\"sms_message\":{\"content\":\"sms msg content\",\"delay_time\":3600},\"options\":{\"time_to_live\":60,\"apns_production\":false,\"apns_collapse_id\":\"jiguang_test_201706011100\"}}";
public void Execute()
{
//str 是一串結構層級比較多,且Key又不是很確定的Json串,這種情況當然用Objcet可以反序列化、用Dictionary<string,object>也可以,
//但肯定都沒有JObject方便,特別是在Get、Set的時候
dynamic model = JObject.Parse(str);
if (model.audience != null)
{
var tag = model.audience.tag;//在不定義類型的情況下我們就將tag 屬性取出來了,十分的方便
//將我們要賦值的數組轉換成JArray 直接賦值就可以了
var tags = new string[] { "x", "y" };
model.audience.tag = JArray.FromObject(tags);
// 將我們要賦值的對象轉換成JObject 直接賦值就可以了
var datas = new {
name = "xx",
org="yy"
};
model.audience = JObject.FromObject(datas);
}
}