У меня есть схема 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#?
Я пробовал, и это ошибочно. Например, чтобы сделать атрибут обязательным, просто добавьте [Required ()] над атрибутом класса, но json2csharp.com создает класс, в котором RootObject имеет атрибут, который является массивом с именем required. Итак, я следую вашему первому утверждению, что версия - это строка. Так выглядит атрибут vectorString для класса. Но где в игру вступает enum? Это просто говорит нам, что данные будут строкой, и это будет только значение в этом перечислении (которое равно 3.0)
Используйте app.quicktype.io, у него есть конвертер в C#. Но обратите внимание, что ваше поле перечисления имеет значение «3.0», которое не может быть допустимым значением перечисления в C#, поэтому для его реализации требуются некоторые уловки, и упомянутый преобразованный делает это. Но вы можете рассмотреть простой подход - просто рассматривать поле «версия» как строку. Это зависит от желаемого сценария использования. Вы даже можете определить строку const MyVersion = "3.0", если хотите сравнить это поле в своем коде вместо enum.
@SergeyL Правильно. Я всегда могу установить свойство в строку и просто выполнить проверку в своем коде, чтобы убедиться, что значение равно единице в «перечислении», указанном в схеме. Я просто не знал, есть ли способ сделать так, чтобы класс отражал информацию схемы перечисляемого атрибута.





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