Search code examples
c#json.netdeserialization

Json.NET case-sensitive deserialization


Is there a deserialization option to perform case-sensitive deserialization with Json.NET?

Suggest:

public class Account
{
    public string Email { get; set; }
    public bool Active { get; set; }
    public DateTime CreatedDate { get; set; }
    public IList<string> Roles { get; set; }
}

must fail, when deserialized from:

{
  "email": "[email protected]",
  "active": true,
  "createdDate": "2013-01-20T00:00:00Z",
  "roles": [
    "User",
    "Admin"
  ]
}

Solution

  • Not likely unfortunately. It seems to be hardcoded to try case-sensitive then case-insensitive.

    /// <summary>
    /// Gets the closest matching <see cref="JsonProperty"/> object.
    /// First attempts to get an exact case match of propertyName and then
    /// a case insensitive match.
    /// </summary>
    /// <param name="propertyName">Name of the property.</param>
    /// <returns>A matching property if found.</returns>
    public JsonProperty GetClosestMatchProperty(string propertyName)
    {
        JsonProperty property = GetProperty(propertyName, StringComparison.Ordinal);
        if (property == null)
        {
            property = GetProperty(propertyName, StringComparison.OrdinalIgnoreCase);
        }
    
        return property;
    }
    

    JsonPropertyCollection

    This is invoked by the internal reader so there's no simple switch that you could just flip. It should be possible, but you would have to write the converter yourself to reject case-insensitive matches.