如何从JsonTextReader中读取整个字符串



我有一个JsonConverter。我为ReadJson创建了一个单元测试。我在单元测试中有一个错误,说reader值为null。如何从读取器读取整个字符串?

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);
}
}

我的单元测试代码

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);
}

我使用转换器将字符串转换为我的类型

[JsonConverter(typeof(StringConverter<InstanceSettings>))]
[JsonProperty("settings")]
public InstanceSettings Settings { get; set; }

我更换了转换器,修复了问题

public class InstanceSettingsConverter : JsonConverter<InstanceSettings>
{
public override InstanceSettings ReadJson(JsonReader reader, Type objectType, InstanceSettings existingValue, bool hasExistingValue, JsonSerializer serializer)
{
var json = reader.ValueType == typeof(string) ? reader.Value.ToString() : JRaw.Create(reader).ToString();
return JsonConvert.DeserializeObject<InstanceSettings>(json);
}
public override void WriteJson(JsonWriter writer, InstanceSettings value, JsonSerializer serializer)
{
JsonConvert.SerializeObject(value);
}
}

最新更新