使用dynamic獲取類型可變的json對象


標題可能有點含糊不清

我這個例子的來源是,對方會返回給我json,不過成功的json與失敗的json是不同的對象

我想用一個方法獲取到這個對象的所有屬性並打印到log中

因為是動態變化的,所以第一個想到的就是用dynamic

下面是dynamic例子

List<dynamic> lst = new List<dynamic>() { new { aa = 1, bb = "2" } };
            Type type = lst[0].GetType();
            var ps = type.GetProperties();

這樣是可以取到屬性的,但是(總有個但是)

string json = "{\"banme\":\"asd\"}";
            dynamic dobj = JsonConvert.DeserializeObject(json, typeof (object)) as dynamic;
            var s = dobj.GetType().GetProperties();
            var i = dobj.banme;

這個反序列回來的對象,我們是可以獲取到banme屬性的值asd的,但是當我們去s里查看屬性的時候,卻沒有banme這個屬性,仔細看了一下dobj的屬性是 dobj.GetType() {Newtonsoft.Json.Linq.JObject} dynamic {System.RuntimeType}

只是我們用了dynamic動態獲取到了那個banme屬性的值

暫時還沒找到獲取動態屬性的方法

所以我采用的下一種方法

JavaScriptSerializer siSerializer=new JavaScriptSerializer();
            dynamic dobj2 = siSerializer.Deserialize<dynamic>(json);
            foreach (var ss in dobj2.Keys)
            {
                var ii = dobj2[ss];
            }

微軟的這個json序列化工具,反序列化回來一個鍵值對的對象,那么只要遍歷keys就可以獲取的他的屬性啦

這樣,我就可以把完全未知的對象屬性都記錄到日志里了。

到此還不算結束,其實這種方法不好,如果屬性也是一個類型,就很難進一步動態獲取了,還是直接轉成對象,通過對象屬性來獲取來的實惠。

到此還不算結束,后來我想了一下,既然是記錄日志,直接把json記錄下來就好了,干嘛轉來轉去呢……全劇終


免責聲明!

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



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