In the line of code below, my string x ends up being an actual string "null" when clInitializer.AVOptions = null value:
string x = JsonConvert.SerializeObject(clInitializer.AVOptions, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore});
As in actual word "null" and not a null value or perhaps {}. I am not sure this is expected behavior. Does anyone know how to make it not return the word "null", or do I have some fundamental misunderstanding on how JsonConvert works. Thank you in advance.
Alternatively you can ignore null values when you serialize. string json = JsonConvert.SerializeObject (employee, Newtonsoft.Json.Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
SerializeObject(Object, Formatting, JsonSerializerSettings) Serializes the specified object to a JSON string using formatting and JsonSerializerSettings. Serializes the specified object to a JSON string using a type, formatting and JsonSerializerSettings.
JsonConvert.DeserializeObject can leave reference type member properties null during deserialization without [JsonProperty] attribute on the property. 1. Synchronize the property name in the class and in the JSON file.
Serializes the specified object to a JSON string using JsonSerializerSettings . Serializes the specified object to a JSON string using formatting and a collection of JsonConverter .
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.
A value of null will always return the null string.
JsonConvert.SerializeObject(null, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore});
Will return the string null.
If you were to pass in the object clInitializer that has a null AVOptions then with your JsonSerializerSettings it would Ignore the property AVOptions and not have that in the string. If your clInitializer object only had the property AVOptions (or only null properties) then you would get {} returned when passing in clInitializer.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With