最近有人問我怎麼定製乙個json序列化,使序列化的時候只寫出宣告的父類成員,而不要把實際子類的成員寫出來。當然,序列化用的是大家用的最多的json.net。
簡單的說,這是個契約怎麼解析的問題,json.net選擇使用實際型別自然是有多方面的考量,畢竟申明型別可以是抽象類或介面等。廢話不說了,直接上**(僅用於示例,要用於生產的話需要處理各種邊緣情況)。
型別關係
public class rootobj
}public class a
}public class b : a
}
例項和序列化
var r = new rootobj };
console.writeline(jsonconvert.serializeobject(r));
在什麼都不改的情況下,輸出是:
}
而期望值是:
}
我們期望只輸出a的成員。
寫自己的jsonconverter:
public class jc: jsonconverter
writer.writeendobject();
}}
標記我們的型別
public class rootobj
}
run! 然後就可以發現結果和我們期待的一樣了:)
源**傳輸門
json序列化 反序列化
json序列化 json的dumps方法可以將json格式資料序列為python的相關資料型別,比如str,常用於列印,另外,在序列化時,中文漢字被轉換為unicode編碼,在dumps函式中新增引數ensure ascii false可解決 dumps的indent參考可以調整顯示格式,即縮排,一...
Json序列化和反序列化
json測試 public class jsontest irun 實體序列化和反序列化 string json1 jsonhelper.serializeobject sdudent json1 student sdudent1 jsonhelper.deserializejsontoobject...
json序列化與反序列化
1.什麼是序列化與反序列化?序列化就是將記憶體中的資料結構轉換成一種中間格式儲存到硬碟或者基於到網路傳輸。反序列化就是將硬碟中或者網路中傳來的一種資料格式轉換成記憶體中資料格式。2.為什麼要有序列化和反序列化?1.可以儲存程式的執行狀態。比如遊戲中使用者在某個狀態下線,使用者遊戲的資料需要儲存,這時...