Как по умолчанию построить объект JavaScript из схемы JSON?

Я начал использовать Newtonsoft.Json.Schema.JsonSchemaGenerator вместе с различными атрибутами свойств в своем коде C#, чтобы сохранить мой клиентский скрипт СУХИМ. Что я хотел бы сделать, так это создать инициализированный по умолчанию объект на стороне клиента на основе схемы с сервера. Это было бы полезно, скажем, когда пользователь нажимает «Новый Foo», чтобы добавить новую запись в таблицу.

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

Существуют ли какие-либо JS-библиотеки для работы со схемой JSON, которые будут делать это, среди других отличных вещей, которые мне еще предстоит понять, что мне нужно?


ОБНОВЛЕНИЕ 29.01.2013

Некоторые люди пытались ответить на мой вопрос и ошибались, в результате чего получили негативные отзывы от сообщества SO. Итак, позвольте мне попытаться прояснить ситуацию. Вот вызов:

  • В клиентском сценарии JS у вас есть объект, представляющий JSON Schema другого объекта. Допустим, это пришло с сервера через JSON.NET и является представлением класса C#.

  • Теперь в клиентском сценарии JS создайте один из этих объектов на основе схемы JSON. Каждое поле/свойство в объекте должно быть инициализировано по умолчанию в соответствии со схемой, включая все содержащиеся объекты!

  • БОНУС: привяжите этот новый объект к пользовательскому интерфейсу с помощью MVVM (например, Knockout). Измените некоторые поля в ответ на ввод пользователя.

  • Отправьте этот новый объект на сервер. Код на стороне сервера добавит его в коллекцию, таблицу базы данных и т.д. (Да, объект будет отправлен в формате JSON с использованием Ajax — мы можем это предположить)

  • Без дублирования! Единственное место, где класс определен, находится в коде на стороне сервера (в моем примере C#). Сюда входят все метаданные, такие как значения по умолчанию, текст описания, допустимые диапазоны и т. д.


person BrandonLWhite    schedule 01.10.2012    source источник
comment
У меня такая же проблема (угловая, а не нокаутирующая), вы что-нибудь нашли?   -  person Aaron Fischer    schedule 07.04.2014
comment
Неа. Я закончил тем, что кое-что сделал, чтобы выполнить работу. Однако я позволил себе некоторые вольности (например, кладж) с некоторыми вещами, чтобы выполнить всю автоматизацию, которую я искал.   -  person BrandonLWhite    schedule 07.04.2014


Ответы (2)


Да, есть (я пробовал с NodeJS):

Схема JSON по умолчанию

person damorin    schedule 28.02.2018

я думаю... вам нужно использовать двустороннюю привязку к вашему HTML-коду... поэтому, как только ваша клиентская сторона изменится, вы получите файл js своего костюма.

проверьте здесь для нокаута js.

Отключить ссылку JS

а в коде C# используйте: $("#urlhidden").val() ИЛИ Document.GetElemenyByID("#urlhidden").val().

здесь вы получите значение массива/списка или текстового поля

Используйте json с Ко

создайте новую модель представления для нокаута js, о которой вы узнаете по ссылке выше.

и создайте вызов json, например:

 self.LoadMAS_Client = function () {

        try {



            var params = { "clientID": ClientId };

            $.ajax({
                type: "POST",
                url: "http://" + ServerString + "/Services/LogisticsAppSuite-Services-Web-Services-MasClientService.svc/Json/GetAllLevelSubClients",
                contentType: 'application/json',

                data: JSON.stringify(params),
                dataType: 'json',
                async: false,
                cache: false,
                success: function (response) {


              // in response u will get the data.and use as per your requirement.

                  eg.   self.SelectedClient(response.your value);





                },
                error: function (ErrorResponse) {


                }

            });
        }
        catch (error) {



        }
    };

================================Новое обновление ================= ========================== я думаю... один из способов сделать... получить данные в формате xml в коде С# и преобразовать в json строка... проверьте код ниже // Чтобы преобразовать узел XML, содержащийся в строке xml, в строку JSON

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string jsonText = JsonConvert.SerializeXmlNode(doc);

// To convert JSON text contained in string json into an XML node
XmlDocument doc = (XmlDocument)JsonConvert.DeserializeXmlNode(json);  
person Jignesh.Raj    schedule 29.01.2013
comment
Как KO использует схемы JSON? - person Bergi; 29.01.2013
comment
Спасибо за ответ, Jignesh, но ваш ответ относится к использованию MVVM, что, безусловно, хорошо, но не касается моего вопроса. Действительно, хотя я использую Knockout в своих веб-приложениях! Я люблю это! - person BrandonLWhite; 29.01.2013
comment
я думаю... один из способов сделать... получить данные в формате xml в коде С# и скрыть в строку json... - person Jignesh.Raj; 30.01.2013