Десериализовать json с помощью массива перечисленийC#

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

Сообщение Anonymous »

Использование перечисления:

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

namespace AppGlobals
{
[JsonConverter(typeof(JsonStringEnumConverter))]
public enum BoardSymbols
{
[EnumMember(Value = "X")]
First = 'X',
[EnumMember(Value = "O")]
Second = 'O',
[EnumMember(Value = "?")]
EMPTY = '?'
}
}
Я хотел бы определить модель для своего API:

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

using System;
using System.ComponentModel.DataAnnotations;
using System.Text.Json.Serialization;
using Newtonsoft.Json;

namespace Assignment_1
{
public class MyRequest
{
//...
[Required]
[MinLength(9)]
[MaxLength(9)]
[JsonProperty("changeTypes", ItemConverterType = typeof(JsonStringEnumConverter))]
public AppGlobals.BoardSymbols[] GameBoard { get; set; }
}
}
Где GameBoard должен сериализоваться в JSON как массив строк с именами, указанными атрибутами EnumMember. Этот подход адаптирован из десериализации символа json как перечисления. Однако это не работает. Это сработает, если я изменю перечисление на:

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

    [JsonConverter(typeof(JsonStringEnumConverter))]
public enum BoardSymbols
{
X='X',
Y='Y'
}
Но я, очевидно, достиг предела «пустого» перечисления. Как я могу это сделать?

обновление 2:

У меня не было AddNewtonsoftJson() в моем стартапе я полностью перешел на Newtonsoft. Теперь моя ошибка, возможно, более действенна:

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

System.InvalidCastException: Unable to cast object of type 'CustomJsonStringEnumConverter' to type 'Newtonsoft.Json.JsonConverter'.
at Newtonsoft.Json.Serialization.JsonTypeReflector.CreateJsonConverterInstance(Type converterType, Object[] args)
Это имеет смысл, решение, прописанное мне здесь, указало JsonConverterFactory. Вместо этого мне просто нужен необработанный JsonConverter для моего варианта использования.

Подробнее здесь: https://stackoverflow.com/questions/599 ... ay-of-enum
Ответить

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

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

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

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

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