автоматически генерировать объектную модель javascript из объекта c # - PullRequest
18 голосов
/ 06 ноября 2011

Поиск существующих, проверенных решений для быстрого создания клиентской объектной модели javascript , представляющей существующий объект c #.Я думаю, что есть шаблон T4 или какой-то другой подход, но мне не хватает терминологии, чтобы найти его.Я не говорю о сериализации, чтобы получить JSON-представление существующего экземпляра объекта c # или что-либо, связанное с десериализацией.Я просто хочу сгенерировать объектную модель javascript для 20+ объектов c # и хочу, чтобы их можно было сгенерировать в любой момент, если код c # изменится.

Слишком упрощенный пример того, что яищу:

C # код:

[Serializable()] 
public class Cat 
{ 
    public string Name { get; set; }
    public string Breed { get; set; }
} 

Модель объекта Javascript для генерации:

function Cat() 
{ 
    this.Name = ""; 
    this.Breed = ""; 
} 

@ Baszz

JSON isтекстовый стандарт для обмена данными, и это не то, что я ищу.Мне нужно сгенерировать клиентский API из 20+ объектов, которые я могу поместить в файл javascript и связать этот скрипт с моими различными веб-страницами.

JavaScriptSerializer может выдавать строку, подобную приведенной ниже, из объекта ac #:

{ "Name": "Hayden", "Breed": "Rabbit” } 

Но это не то же самое, что:

function Cat()  
{  
    this.Name = "";  
    this.Breed = "";  
}  
  1. Строка JSON не является именованной функцией.
  2. Все элементы заключены в кавычки и в формате JSON, что потребует ручного синтаксического анализа строки для получения нужного мне формата.
  3. Невозможно создать новый-при экземпляре Cat, как показано ниже, из-за # 1

var myCat = new Cat ();

Не так много комментариев, поэтому я предполагаю, что все делают это вручнуюили нет вообще.Рассматривая создание моего собственного шаблона T4 для анализа файлов c # и создания моих клиентских API.

Ответы [ 4 ]

5 голосов
/ 15 ноября 2011

После бесчисленных поисков я не смог найти ничего похожего на то, что искал. Совершенно очевидно, что в последние несколько лет все поймали модное слово JSON, и никто не занимается автоматической генерацией объектных моделей на стороне клиента. Я посмотрел на Codesmith и шаблоны T4. Ни один из них не имеет встроенных механизмов для анализа файлов кода. И то, и другое требует от вас задуматься о свойствах и их типах, что на 100% ложится на плечи разработчиков. Какой вопрос напрашивается, когда вы перепрыгиваете через этот цикл написания всего этого кода отражения, какую выгоду дают шаблоны Codesmith или T4? Абсолютно ничего ... Вы не возражаете и поместите свой код отражения в многократно используемую библиотеку классов и вызовите его из консольного приложения, и именно это я и сделал.

2 голосов
/ 23 октября 2015

Это старый вопрос, но вы можете попробовать sharp2Js . Это библиотека, предназначенная для отражения ваших классов и создания объектов javascript с помощью пары служебных функций.

Запуск его в соответствии с предоставленным вами примером (и вывод строки, которую он производит в шаблоне T4 или другим способом):

string modelOutput = Castle.Sharp2Js.JsGenerator.
          GenerateJsModelFromTypeWithDescendants(typeof(Cat), true, "example");

Производит:

example = {};

example.Cat = function (cons, overrideObj) {
    if (!overrideObj) { overrideObj = { }; }
    if (!cons) { cons = { }; }
    var i, length;
    this.name = cons.name;
    this.breed = cons.breed;


    this.$merge = function (mergeObj) {
        if (!mergeObj) { mergeObj = { }; }
        this.name = mergeObj.name;
        this.breed = mergeObj.breed;
    }
}

В дополнительных метаданных есть некоторые леса для поддержки коллекций и сложных типов с возможностью создания унаследованных объектов для переопределения поведения и т. Д.

Примечание: я поддерживаю sharp2Js, и он новый и пока мало что делает, но, возможно, он может помочь в таких сценариях, как ваш.

1 голос
/ 17 декабря 2013

Я думал о той же идее и немного обыскал ее, но нашел эту ссылку, может быть, она полезна: http://igorshare.wordpress.com/2012/08/20/roslyn-c-is-cheating-on-me-with-javascript-or-how-to-compile-c-into-javascript/

0 голосов
/ 06 ноября 2011

Я не уверен, что смог понять, о чем вы говорите, но если вы используете Reflection, вы можете получить данные о коде C # для генерации информации для объекта javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...