在定义好了对象的类型后,通过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也可以, //但肯定都没有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); }}