I am facing a case where in my JsonConverter I want the JsonWriter to do nothing.
My first attempt was to write:
public override void WriteJson(JsonWriter writer, IFoo<decimal> degrees, JsonSerializer serializer)
{
var enumerable = Convert(degrees);
if (enumerable != null)
JToken.FromObject(enumerable).WriteTo(writer);
}
but it throw the following error
Token PropertyName in state Property would result in an invalid JSON object. Path 'foo[0].bar[1].'.
I can avoid the error by adding an else with a writer.WriteNull()
like this:
public override void WriteJson(JsonWriter writer, IFoo<decimal> degrees, JsonSerializer serializer)
{
var enumerable = Convert(degrees);
if (enumerable != null)
JToken.FromObject(enumerable).WriteTo(writer);
else
writer.WriteNull();
}
The json output is:
{
"foo": null
}
But What I would like is an object free from foo: {}
.
I know that I could set an attribute with NullValueHandling.Ignore
, but there are some cases where I want to keep null
.
I would like something like:
public override void WriteJson(JsonWriter writer, IFoo<decimal> degrees, JsonSerializer serializer)
{
var enumerable = Convert(degrees);
if (enumerable != null)
JToken.FromObject(enumerable).WriteTo(writer);
else
writer.Skip(); // or writer.Ignore() or writer.DoNothing() or whatever
}
How to tell the JsonWriter to do nothing?