Search code examples
c#jsonserializationjson.netdeserialization

Json.NET MissingMemberHandling setting


I would like Json.NET to throw a JsonSerializationException when the Json string is missing a property that the C# class requires.

There is the MissingMemberHandling Enumeration which

Throw a JsonSerializationException when a missing member is encountered during deserialization.

but I think this is the reverse of what I want. I think this means a missing member on the c# class. I want a missing Json member.

My code is

public MyObj Deserialise(string json)
{
    var jsonSettings = new JsonSerializerSettings();
    jsonSettings.MissingMemberHandling = MissingMemberHandling.Error;

    return JsonConvert.DeserializeObject<ApiMessage>(json, jsonSettings);
}

For example

public class MyObj
{
    public string P1 { get; set; }
    public string P2 { get; set; }
}

string json = @"{ ""P1"": ""foo"" }";

P2 is missing from the json. I want to know when this is the case.

Thanks.


Solution

  • You have to set the P2 property to mandatory with the JsonPropertyAttribute

    public class ApiMessage
    {
        public string P1 { get; set; }
        [JsonProperty(Required = Required.Always)]
        public string P2 { get; set; }
    }
    

    With your example, you will get an JsonSerializationException.

    Hope it helps!