標題可能有點含糊不清
我這個例子的來源是,對方會返回給我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記錄下來就好了,干嘛轉來轉去呢……全劇終