.Net 的动态对象(二)动态解析Json(JObject)

在定义好了对象的类型后,通过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);
    }
}

猜你喜欢

转载自www.cnblogs.com/PenZ/p/10318220.html
今日推荐