.net Json的幾個坑

當反序列化的對象沒有無參構造函數時,就會出現亂七八糟的現象
據我試驗的結果,沒有無參數構造函數時,
第一步,應該是先找json字符串中有沒有與參數名相同的數值,有的話反序列化構建對象時,填入對應的參數,一旦值做爲參數填入,後續反序列化流程不會再使用此值,構造完後,剩下的其他值,看對象有沒有相應的名稱屬性,或字段,有則填入值。 …太複雜了,使用起來非常不方便,非常容易出錯。 所以 所有將要使用到 Json反序列化的對象最好都帶有無參數構造函數。
下面是驗證我結論的試驗
1.

public class Pos{
			public int x;
			public int y;
			public Pos(int x){
				
			}
		}

在這裏插入圖片描述
由於 構造函數中有x ,但是啥也沒做, 構造完後, 還剩下y的值沒有用,發現有y字段 則填入其值,所以得到結果x=0,y=11;
2.

public class Pos{
			public int x;
			public int y;
			public Pos(int x){
				this.y = x;
			}
		}

在這裏插入圖片描述
這次我在構造函數中讓 x 的值給y, 後面由於json 中 y 的值還未使用 填入字段y,y的值被覆蓋,所以得到結果x=0,y=11
3.

public class Pos{
			public int x;
			public int y;
			public Pos(int x, int y){
				this.x = x + 1;
				this.y = y + 1;
			}
		}

在這裏插入圖片描述
這次構造函數中兩個值都用上了, 並在構造函數中得到爲其值+1 所以得到結果 x=11 y=12,

使用無參數構造函數後,在構造對象時,將不會用上任何 json字符串中的值,所以反序列化的對象都可被填入相應的數據。 而不會是json 數據得到破壞。

第二個坑:
在untiy 客戶端中,打包成IOS 程序後, 反序列Json的對象如果沒有無參數構造函數將會報錯,而且還需要在代碼中定義一個靜態的對象,默認值使用無參數構造函數創建。否則將會運行報錯。

第三個坑:
要被序列化成Json對象的數據,其屬性,字段值最好不要使用多態,否則反序列化時,將無法得到多態屬性,字段的具體對象 .

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章