The NullValueHandling has to do with null values for a property and not the object it self.
For example, if you have the below example:
public class ExampleClass
{
    public string NullProperty { get; set; }
}
And then you serialize it:
var obj = new ExampleClass();
var jsons = JsonConvert.SerializeObject(obj, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });
Then the NullProperty is ignored and you get {}.
Edited
The reason why "null" is returned is because the RFC for JSON (https://www.rfc-editor.org/rfc/rfc7159) explicitly states the following:
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
Edited:
I originally had a work around, but I removed it because I really think you should follow the RFC.  The RFC clearly stated that a NULL object MUST be represented by a "null" so any work around is not a good idea.
To stay with the RFC, I would store "null" or return "null" and not NULL. When you deserialize "null" it will return a NULL value.