Подтвердить что ты не робот

Автоматически генерировать объектную модель javascript из объекта С#

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

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

Код С#:

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

Объектная модель Javascript, которая должна быть сгенерирована:

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

@Baszz

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

JavaScriptSerializer может выплеснуть строку, как показано ниже, из объекта С#:

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

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

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

var myCat = new Cat();

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

4b9b3361

Ответ 1

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

Ответ 2

Это старый вопрос, но вы можете попробовать 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, и он новый и не делает много еще, но, возможно, он может помочь в таких сценариях, как ваш.

Ответ 4

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