Перечисление схемы json в эквивалент класса c#

У меня есть схема JSON, из которой я пытаюсь сделать класс C#.

Возникающий у меня вопрос заключается в первом свойстве RootObject.

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "properties": {
        "version": {
            "type": "string",
            "enum": [ "3.0" ]
        },
        "vectorString": {
            "type": "string"
        }
    },
    "required": [ "version" ]
}

vectorString - это строка, поэтому это легко:

public class RootObject {
    public string vectorString { get; set; }
}

Однако версия - это строка И имеет модификатор перечисления. У меня вопрос: как смоделировать статические значения перечисления в схеме JSON для класса C#?

Я не совсем уверен, что вы имеете в виду под «модификатором перечисления», но version - это объект с string type и List<string> enum. Попробуйте использовать json2csharp.com

Camilo Terevinto 10.08.2018 15:32

Я пробовал, и это ошибочно. Например, чтобы сделать атрибут обязательным, просто добавьте [Required ()] над атрибутом класса, но json2csharp.com создает класс, в котором RootObject имеет атрибут, который является массивом с именем required. Итак, я следую вашему первому утверждению, что версия - это строка. Так выглядит атрибут vectorString для класса. Но где в игру вступает enum? Это просто говорит нам, что данные будут строкой, и это будет только значение в этом перечислении (которое равно 3.0)

toadfromgrove 10.08.2018 15:39

Используйте app.quicktype.io, у него есть конвертер в C#. Но обратите внимание, что ваше поле перечисления имеет значение «3.0», которое не может быть допустимым значением перечисления в C#, поэтому для его реализации требуются некоторые уловки, и упомянутый преобразованный делает это. Но вы можете рассмотреть простой подход - просто рассматривать поле «версия» как строку. Это зависит от желаемого сценария использования. Вы даже можете определить строку const MyVersion = "3.0", если хотите сравнить это поле в своем коде вместо enum.

Sergey L 10.08.2018 15:59

@SergeyL Правильно. Я всегда могу установить свойство в строку и просто выполнить проверку в своем коде, чтобы убедиться, что значение равно единице в «перечислении», указанном в схеме. Я просто не знал, есть ли способ сделать так, чтобы класс отражал информацию схемы перечисляемого атрибута.

toadfromgrove 10.08.2018 16:27
0
4
495
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Оказалось, что мне не нужно беспокоиться о метатеге enum. просто создание строкового свойства для версии работало нормально.

Другие вопросы по теме