В нашем C# .net 4.8 Applicaiton мы попытались использовать opulateObject для десеризации из API. Этот API не под нашим контролем. Теперь разработчик API добавил новое значение Enum, и когда мы пытаемся отобразить его в нашем собственном enum , он сбоят с сообщением, подобным «преобразованию ошибок», «X» в «Enum-y». Теперь мы могли бы настроить наш Enum и продолжать, но это будет только временным исправлением, пока это не повторится в другой части кода. Итак, мы немного искали и нашли конкретное решение. Мы добавили «неизвестную» значение в нашу enum , а затем добавили преобразователь, как это:
Код: Выделить всё
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 за enum . Примерно на 40 перечисленных было бы немного много для создания 40 преобразователей, просто чтобы я мог игнорировать некоторые значения, которые не существуют.
имеет кто -то лучшую идею?>
Подробнее здесь:
https://stackoverflow.com/questions/794 ... -exception