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

c# – JsonConvert.SerializeObject:序列化空值时出现意外结果,第1张

概述在下面的代码行中,当clInitializer.AVOptions = null值时,我的字符串x最终成为实际字符串“null”: string x = JsonConvert.SerializeObject(clInitializer.AVOptions, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ign 在下面的代码行中,当clinitializer.AVOptions = null值时,我的字符串x最终成为实际字符串“null”:

string x = JsonConvert.SerializeObject(clinitializer.AVOptions,new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore});

如实际的单词“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(https://tools.ietf.org/html/rfc7159)的RFC明确说明了以下内容:

A JsON value MUST be an object,array,number,or string,or one of
the following three literal names:

false null true

The literal names MUST be lowercase. No other literal names are
allowed.

value = false / null / true / object / array / number / string

false = %x66.61.6c.73.65 ; false

null = %x6e.75.6c.6c ; null

true = %x74.72.75.65 ; true

编辑:

我最初有一个工作,但我删除它,因为我真的认为你应该遵循RFC. RFC明确指出NulL对象必须用“null”表示,所以任何解决方法都不是一个好主意.

为了保持RFC,我会存储“null”或返回“null”而不是NulL.反序列化“null”时,它将返回NulL值.

〜干杯

总结

以上是内存溢出为你收集整理的c# – JsonConvert.SerializeObject:序列化空值时出现意外结果全部内容,希望文章能够帮你解决c# – JsonConvert.SerializeObject:序列化空值时出现意外结果所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1220504.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存