![](/img/trans.png)
[英]JsonConvert.serializeObject with dataset returning unexpected result
[英]JsonConvert.SerializeObject: Unexpected result when Serializing null value
在下面的代碼行中,當clInitializer.AVOptions = null
值時,我的string x
最終成為實際字符串“null”:
string x = JsonConvert.SerializeObject(clInitializer.AVOptions, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore});
如實際的單詞“null”而不是null
值或者可能是{}
。 我不確定這是預期的行為。 有誰知道如何讓它不返回“null”這個詞,或者我對JsonConvert
工作方式有一些基本的誤解。 先感謝您。
NullValueHandling
與屬性的空值有關,而與自身的對象無關。
例如,如果您有以下示例:
public class ExampleClass
{
public string NullProperty { get; set; }
}
然后你序列化它:
var obj = new ExampleClass();
var jsons = JsonConvert.SerializeObject(obj, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });
然后忽略NullProperty
,你得到{}
。
編輯
返回“null”的原因是因為JSON的RFC( https://tools.ietf.org/html/rfc7159 )明確說明了以下內容:
JSON值必須是對象,數組,數字或字符串,或者是其中之一
以下三個字面名稱:false null true
文字名稱必須小寫。 沒有其他文字名稱
允許。value = false / null / true / object / array / number / string
false =%x66.61.6c.73.65; 假
null =%x6e.75.6c.6c; 空值
true =%x74.72.75.65; 真正
編輯:
我最初有一個工作,但我刪除它,因為我真的認為你應該遵循RFC。 RFC明確指出NULL對象必須用“null”表示,所以任何解決方法都不是一個好主意。
為了保持RFC,我會存儲“null”或返回“null”而不是NULL。 反序列化“null”時,它將返回NULL值。
〜干杯
值null將始終返回空字符串。
JsonConvert.SerializeObject(null, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore});
將返回字符串null
。
如果你傳入具有空AVOptions
的對象clInitializer
然后使用你的JsonSerializerSettings
它會忽略屬性AVOptions
而不是字符串中的那個。 如果您clInitializer
對象只有財產AVOptions
(或只空的屬性),那么你會得到{}
傳遞時返回clInitializer
。
{}將是一個空的json對象(不是null)。 所以它唯一可以返回的是“null”,它是null對象的json表示。 我想如果你想要一個實際的空字符串,你需要在調用周圍放一個if語句,如下所示:
string x = null;
if (clInitializer.AVOptions != null) {
x = JsonConvert.SerializeObject(clInitializer.AVOptions, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore});
}
更新:請參閱@ Rogala的答案,了解為什么你應該考慮不忽略返回的“null”值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.