I want to create a Newtonsoft Json Enum converter, that in case I can't convert the string to an enum, I will log the original value and will assign the value Unknown.
This is my Enum:
public enum Size
{
S,
M,
L,
XL,
UnknownSize
}
This is my converter:
public class SizesStringEnumConverter: StringEnumConverter
{
private readonly ILogger _logger;
public SizesStringEnumConverter(ILogger logger)
{
_logger = logger;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
try
{
return base.ReadJson(reader, objectType, existingValue, serializer);
}
catch // e.g. in cases where Size is "XXXL"
{
_logger.Warning($"Couldn't convert value: {reader.Value} from JSON into a Size");
return Size.UNKNOWN;
}
}
}
Unfortunately, I can't use this JsonEnumConverter since it must have a parameterless constructor. When I try to add a parameterless constructor, the _logger instance is always null. Do you know how can I solve/fix it?
This is how I try to deserialize:
var logger = new LocalLogger();
var serializer = new SizesStringEnumConverter(logger);
string testJson = @" {
""Size"": ""XXXXXXL""
}"
;
var shirt = JsonConvert.DeserializeObject<Shirt>(testJson, serializer)