JsonConvert.SerializeObject:序列化空值时出现意外结果

con*_*riq 6 c# null json json.net null-string

在下面的代码行中,string xclInitializer.AVOptions = null值为:时,我最终成为实际字符串"null" :

string x = JsonConvert.SerializeObject(clInitializer.AVOptions, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore});
Run Code Online (Sandbox Code Playgroud)

如实际的单词"null"而不是null值或者也许{}.我不确定这是预期的行为.有谁知道如何让它不返回"null"这个词,或者我对如何JsonConvert运作有一些根本的误解.先感谢您.

Rog*_*ala 7

NullValueHandling与属性的空值有关,而与自身的对象无关.

例如,如果您有以下示例:

public class ExampleClass
{
    public string NullProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后你序列化它:

var obj = new ExampleClass();
var jsons = JsonConvert.SerializeObject(obj, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });
Run Code Online (Sandbox Code Playgroud)

然后NullProperty被忽略,你得到{}.

编辑

返回"null"的原因是因为JSON的RFC(https://tools.ietf.org/html/rfc7159)明确说明了以下内容:

JSON值必须是对象,数组,数字或字符串,或
以下三个文字名称之一:

false null tr​​ue

文字名称必须小写.不允许使用其他文字名称
.

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值.

〜干杯