2014-02-03 1 views
2

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

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

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

В сущности, то, что я хочу, чтобы создать этот JSON Schema:

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

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

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

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

+0

Привет, вы нашли решение о том, как это сделать с Json.NET? Мне также нужно указать описания свойств ... –

+1

Я изменил Json.NET, чтобы делать то, что хотел, но изменения не объединены в основной проект. Их можно найти здесь: https://github.com/kimsey0/Newtonsoft.Json/commits/master –

+0

Он отклонен, поскольку содержит несколько функций. Может быть, нам нужно создать вилку для каждой функции? –

ответ

1

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

Если я правильно понимаю, то, как Json.NET относится к Title и Description, является неправильным. Я рекомендую submitting a feature request/bug report.

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

+0

Спасибо. Я бы согласился с вами, за исключением того, что свойство Required атрибута JsonProperty позволяет мне несколько изменить схему для каждого свойства. Но я обязательно отправлю запрос функции, если не найду лучшего ответа. –