Заполнение перечисления без исключенияC#

Место общения программистов C#
Ответить
Anonymous
 Заполнение перечисления без исключения

Сообщение Anonymous »

В нашем приложении C# на .NET 4.8 мы попытались использовать oplulateObject для десериализации данных, возвращаемых из API. Этот API не находится под нашим контролем.
Теперь разработчик API добавил новое значение перечисления, и когда мы пытаемся отобразить его в нашем собственном переходе он сбои с таким сообщением, как < /p>

Ошибка преобразования Мог бы скорректировать наш перечисление и продолжать, но это будет только временным исправлением, пока это не повторится снова в другой части кода. Мы немного искали и нашли конкретное решение. Мы добавили значение «неизвестного» в наш перечисление, а затем добавили преобразователь, как это: < /p>

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

public class AllowedMethodConverter : StringEnumConverter
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.String)
{
if (Enum.TryParse(reader.Value.ToString(), out Method result)) // Here the Method has to be known
return result;
else
return Method.Unknown;
}

return base.ReadJson(reader, objectType, existingValue, serializer);
}
}

[JsonConverter(typeof(AllowedMethodConverter))]
public enum Method
{
Unknown,
Method1,
Method2
}
< /code>
Это используется очень простым методом API, где мы получаем строку из API, а затем: < /p>
JsonConvert.PopulateObject(response.Content, userSettings);
Это работает хорошо, но это потребует одного StringenumConverter за перечисление. Примерно с 40 перечислением было бы немного много для создания 40 преобразователей, просто чтобы я мог игнорировать некоторые значения, которые не существуют. < /P>
У кого -нибудь есть лучше ?

Подробнее здесь: https://stackoverflow.com/questions/794 ... -exception
Ответить

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

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

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

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

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