我想執行自定義序列化,所有的快樂路徑代碼工作,但空值路徑不表現我想。NullValueHandling.Ignore與JsonConverter :: WriteJson
我已經將串行器設置設置爲NullValueHandling.Ignore
和我的對象圖的其他部分爲空(並且不使用我的自定義序列化)刪除了空值。它看起來像Newtonsoft序列化程序寫入字符串生成器,所以我們應該能夠'倒回'任何書面json令牌,但我不知道如何不寫任何東西。
無所事事,只是返回導致序列化程序引發異常,因爲JSON將無效。
任何線索?
public class SpecialConvertor : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (value == null || (int)value == 0)
{
if (serializer.NullValueHandling == NullValueHandling.Ignore)
{
//how to make this work?
}
else
{
writer.WriteNull();
}
return;
}
// the rest of WriteJson
}
// the rest of SpecialConvertor
}
我無法重現此問題。 1)'NullValueHandling'用於對象引用。由於你的屬性是一個整數,你可能需要['DefaultValueHandling = DefaultValueHandling.Ignore'](http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_DefaultValueHandling.htm)。 2)如果值爲null,則不調用'JsonConverter.WriteJson()',而Json.NET本身寫入空名稱和值。也許你有一些更高級別的轉換器無法檢查'serializer.NullValueHandling'?有關可能出錯的示例,請參閱https://dotnetfiddle.net/dWfJ0o。 – dbc
此外,它可以直接序列化到一個流,例如['GZipStream'](https://stackoverflow.com/questions/32943899/can-i-decompress-and-deserialize-a-file-using-streams ),爲此無法倒帶 – dbc
@dbc很好的工作,不知道我是如何錯過的。漫長的一天等等。從可能爲空的枚舉或者缺乏對序列化程序的信任時,可能會進行空值檢查。該調用將值用作默認(零)值,而不是空值。我看到的是我的,我(錯誤地)寫出來的。稍後我會更詳細地閱讀dotnetfiddle。謝謝。 (如果您需要信用,請添加爲答案) –