当前位置: 首页 > 编程语言 > C#

NullValueHandling.Ignore与JsonConverter--WriteJson

时间:2023-04-11 03:12:18 C#

共享。我已将序列化程序设置为NullValueHandling.Ignore并且我的对象图的其余部分为空(并且不使用我的自定义序列化),空值被删除。看起来Newtonsoft序列化程序写入字符串生成器,因此我们应该能够“回放”任何书面的json标记,但我不知道如何在不编写任何内容的情况下执行此操作。什么都不做,只是返回导致序列化程序抛出异常,因为json无效。有什么线索吗?publicclassSpecialConvertor:JsonConverter{publicoverridevoidWriteJson(JsonWriterwriter,objectvalue,JsonSerializerserializer){if(value==null||(int)value==0){if(serializer.NullValueHandling==NullValueHandling.Ignore){//如何使这个工作?}else{writer.WriteNull();}返回;}//WriteJson的其余部分}//SpecialConvertor的其余部分}NullValueHandling用于对象引用。在您的示例中,您的值是一个整数。要省略具有默认值的整数属性,请使用设置DefaultValueHandling=DefaultValueHandling.Ignore。WriteJson()的null检查应该不是必需的,因为Json.NET从不使用null值调用转换器。相反,如果NullValueHandling==NullValueHandling.Ignore,它会自己写入名称和空值-或者不写入。所以永远不需要检查null和倒带。如果其中一个转换器在WriteJson中显式写入,当null-handling或default-handling为Ignore时,对象属性的null值仍可能写入。为了防止这种情况,可以检查一下设置,跳过null值,如下:以上就是C#学习教程的全部内容:NullValueHandling.Ignore和JsonConverter::WriteJson,如果对大家有用还需要了解更多关于C#学习教程,希望大家多多关注—publicclassMyClassConverter:JsonConverter{conststringPrefix="MyValueIs:";publicoverridevoidWriteJson(JsonWriterwriter,objectvalue,JsonSerializerserializer){varmyClass=(MyClass)value;writer.WriteStartObject();如果(myClass.StringValue!=null||(serializer.NullValueHandling!=NullValueHandling.Ignore&&(serializer.DefaultValueHandling&DefaultValueHandling.Ignore)!=DefaultValueHandling.Ignore)){writer.WritePropertyName("StringValue");如果(myClass.StringValue==null)writer.WriteNull();elseserializer.Serialize(writer,Prefix+myClass.StringValue);}writer.WriteEndObject();}publicoverrideobjectReadJson(JsonReaderreader,TypeobjectType,objectexistingValue,JsonSerializerserializer){if(reader.TokenType==JsonToken.Null)returnnull;vars=(字符串)J值.负载(阅读器);如果(s.StartsWith(Prefix))s=s.Substring(Prefix.Length);返回s;}publicoverrideboolCanConvert(TypeobjectType){returnobjectType==typeof(MyClass);}[JsonConverter(typeof(MyClassConverter))]publicclassMyClass{publicstringStringValue{get;: