I have a JsonConverter. I created a unit test for the ReadJson. I have an error in my unit test that says the reader value is null. How can I read the entire string from the reader?
public class StringConverter<T> : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(T);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return JsonConvert.DeserializeObject<T>((string)reader.Value);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
JsonConvert.SerializeObject(value);
}
}
My code for unit testing
private Converter.StringConverter<InstanceSettings> _converter;
private JsonTextReader CreateJsonReader(string json)
=> new JsonTextReader(new StringReader(json));
[SetUp]
public override void Setup()
{
base.Setup();
_converter = new Converter.InstanceSettingsConverter();
}
public void StringConverter_ReadJson_InvalidJson_EmptyInstanceSettings()
{
// Arrange
var serializer = new JsonSerializer();
var json = "{\"property\":{\"search\":true}}";
var reader = CreateJsonReader(json);
// Act
var result = _converter.ReadJson(reader, typeof(InstanceSettings), null, serializer);
Assert.IsNotNull(result);
Assert.IsAssignableFrom<InstanceSettings>(result);
}
I user the converter to convert string to my type
[JsonConverter(typeof(StringConverter<InstanceSettings>))]
[JsonProperty("settings")]
public InstanceSettings Settings { get; set; }
I changed my converter and that fixed my issue