Код: Выделить всё
using System.Text.Json;
private static JsonSerializerOptions GetOptions()
{
var options = new JsonSerializerOptions();
options.Converters.Add(new ObjectToInferredTypesConverter());
return options;
}
[TestMethod]
public void Read_TrueBoolean_ReturnsTrue()
{
string json = "true";
var result = JsonSerializer.Deserialize(json, GetOptions()); // error happens here
Assert.IsInstanceOfType(result, typeof(bool));
Assert.IsTrue((bool)result);
}
Код: Выделить всё
using System;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace Crashhash.Api.Helpers
{
public class ObjectToInferredTypesConverter : JsonConverter
{
public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return reader.TokenType switch
{
JsonTokenType.True => true,
JsonTokenType.False => false,
JsonTokenType.Number when reader.TryGetInt32(out int i) => i,
JsonTokenType.Number when reader.TryGetInt64(out long l) => l,
JsonTokenType.Number when reader.TryGetDouble(out double d) => d,
JsonTokenType.String when reader.TryGetDateTime(out DateTime datetime) => datetime,
JsonTokenType.String => reader.GetString()!,
_ => JsonDocument.ParseValue(ref reader).RootElement.Clone()
};
}
public override void Write(Utf8JsonWriter writer, object objectToWrite, JsonSerializerOptions options)
=> JsonSerializer.Serialize(writer, objectToWrite, objectToWrite.GetType(), options);
}
}
Код: Выделить всё
System.Text.Json.Serialization.JsonConverter, System.Text.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
System.Text.Json.Serialization.JsonConverter, System.Text.Json, Version=9.0.0.7, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
< /code>
Однако во время выполнения теста я последовательно получаю следующую ошибку: < /p>
SSTEM.ArrayTypemismathCexpectList`1.Add(T item)
ConfigurationList`1.Add(TItem item)
ObjectToInferredTypesConverterTests.GetOptions() line 14
ObjectToInferredTypesConverterTests.Read_TrueBoolean_ReturnsTrue() line 22
Код: Выделить всё
using Newtonsoft.Json;
[TestMethod]
public void example()
{
string json = "true";
var result = JsonConvert.DeserializeObject(json);
Assert.IsInstanceOfType(result, typeof(bool));
Assert.IsTrue((bool)result);
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... t-framewor