System.ArrayTypemismatchException при использовании System.text.json с .net Framework 4.7 в mStestC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 System.ArrayTypemismatchException при использовании System.text.json с .net Framework 4.7 в mStest

Сообщение Anonymous »

Я в настоящее время использую .NET Framework 4.7 вместе с MSTest (все пакеты обновлены). Я пытаюсь покинуть строку JSON с использованием System.text.json , как показано здесь:

Код: Выделить всё

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);
}
Это мой объект objecttorredtypesconverter :

Код: Выделить всё

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);
}
}
Вывод ObjectToCerredTyPesconverter (). getType (). BaseType.BaseType.assembolyqualifiedname и Option.converters.getType (). getMethod ("add"). getParameters () [0] .parameterpe.Ansbalified. />

Код: Выделить всё

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
Интересно, что тот же JSON работает нормально, когда я использую newtonsoft.json :

Код: Выделить всё

using Newtonsoft.Json;

[TestMethod]
public void example()
{
string json = "true";
var result = JsonConvert.DeserializeObject(json);
Assert.IsInstanceOfType(result, typeof(bool));
Assert.IsTrue((bool)result);
}
Мой вопрос: есть ли известное решение или обходной путь для этой проблемы при использовании System.text.json под .net Framework 4.7? Я уже пробовал очистить и восстановить решение и переустановить пакет System.text.json .


Подробнее здесь: https://stackoverflow.com/questions/797 ... t-framewor
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»