Добавьте свойства схемы JSON (название, описание) в свойства класса C# с помощью Json.NET JsonSchemaGenerator.

Я работаю над динамическим созданием HTML-формы из класса на С#. Мой текущий подход заключается в создании схемы JSON из класса C# с использованием JsonSchemaGenerator включается в Json.NET на стороне сервера, а затем обрабатывает форму из этой схемы JSON на стороне клиента.

Я хочу иметь возможность добавлять свойства схемы JSON, такие как название или описание к свойствам класса C#, но не могу найти простой способ заставить JsonSchemaGenerator включить их в сгенерированную схему.

Я могу добавить эти свойства схемы JSON в сам класс, используя один из атрибутов C# JsonObjectAttribute, JsonArrayAttribute или JsonDictionaryAttribute, но с использованием JsonProperty для свойств, я могу только изменить, является ли свойство обязательным или нет.

По сути, я хочу создать эту схему JSON:

{
    "type": "object",
    "properties": {
        "MyString": {
            "type": "string",
            "title": "Title for my string"
        }
    }
}

из этого класса:

class MyClass
{
    public string MyString { get; set; }
}

Должен ли я написать собственный JsonConverter или добавить свойства схемы вручную? Разве Json.NET не подходит для этой работы? Является ли схема JSON неправильным форматом для этого? Или это просто какая-то причудливая функция JsonSchemaGenerator, которую я пропустил?


person Jacob Bundgaard    schedule 03.02.2014    source источник
comment
Привет, вы нашли решение, как это сделать с Json.NET? Мне также нужно указать описания свойств...   -  person Rico Suter    schedule 05.08.2014
comment
Я изменил Json.NET, чтобы он делал то, что хотел, но изменения не были объединены в основной проект. Однако их можно найти здесь: github.com/kimsey0/Newtonsoft.Json/commits/ мастер   -  person Jacob Bundgaard    schedule 05.08.2014
comment
Он был отклонен, потому что он содержит несколько функций. Может быть, нам стоит создать форк для каждой функции?   -  person Rico Suter    schedule 18.08.2014
comment
Да, это правильно. Я сделал патч для работы, мы отошли от JsonSchemaGenerator, и я не нашел времени, чтобы очистить пулл-реквесты. Не стесняйтесь разветвлять проект дважды, применяйте мои патчи и отправляйте запрос на включение каждого из них, хотя я был бы рад, если бы они были объединены.   -  person Jacob Bundgaard    schedule 18.08.2014


Ответы (1)


JsonSchemaGenerator считает, что все объекты типа имеют одинаковую схему ("тип" в общем смысле, а не Type класс). Он не предназначен для поддержки отдельных схем свойств. Он рассматривает Title и Description атрибуты типа, а не свойства (поэтому он ищет только JsonContainerAttribute и его потомков). Поэтому, даже если вам удастся использовать JsonConverter в качестве обходного пути (для генерации «типов»), это по сути будет хаком.

Если я правильно понимаю, Json.NET неправильно обрабатывает Title и Description. Я рекомендую отправить запрос функции/отчет об ошибке.

P.S. Я только что посмотрел на код, я не совсем уверен.

person Athari    schedule 03.02.2014
comment
Спасибо. Я бы согласился с вами, за исключением того, что свойство Required атрибута JsonProperty позволяет мне несколько изменить схему для каждого свойства. Но я обязательно отправлю запрос функции, если не найду лучшего ответа. - person Jacob Bundgaard; 04.02.2014