2013-02-12 8 views
5

Vorrei esporre una classe che ho scritto in C# sull'equivalente javascript.Generazione automatica di codice da una classe C# a equivalente JavaScript

per esempio ho una classe come:

// C# class to represent an Appriaser 
public class Appraiser 
{ 
    public Appraiser(appraiserId, appraiserName) 
    { 
     AppraiserId = appraiserId; 
     AppraiserName = appraiserName; 
    } 
    public int AppraiserId { get; set; } 
    public string AppraiserName { get; set; } 
} 

e vorrei la possibilità di generare automaticamente una versione di questa classe in javascript

// javascript class to represent an Appraiser 
function Appraiser(appraiserId, appraiserName) { 
    var self = this; 
    self.appraiserid= appraiserId; 
    self.appraisername= appraisername; 
} 

Questo è possibile con o JSON.NET un altro metodo?

+0

Vedi http://stackoverflow.com/questions/3455456/how-to-translate-between-programming-languages/3460977#3460977 –

+1

Suppongo che si potrebbe usare Swagger (ora OpenAPI) per la stessa identica cosa (ora) –

risposta

1

so che sto necro'ing una vecchia questione, ma ci sono un paio di opzioni in questi giorni.

C'è uno Class to Knockout Generator per Visual Studio che creerà per voi i modelli Viewout per voi. Inoltre, se entri in Typescript - l'utilizzo dell'opzione "Genera Typescript" di Web Essentials in una classe ti consentirà di fare molto.

+1

Jason, ottima scoperta! In realtà ho anche trovato quel progetto qualche tempo fa dopo che ho postato questa domanda. Ancora veramente fantastico da trovare. Ho davvero la sensazione che VS dovrebbe essere in grado di convertire i POCO C# in OOB di Typescript POCOs. –

+1

Ho trovato Web Essentials come un'estensione ... beh, essenziale ... da aggiungere a Visual Studio. Ha tutte le capacità per prendere classi C# e creare definizioni di dattiloscritto da esse - oltre a gestire automaticamente da LESS a CSS a CSS minificati, così come JS per minimizzare JS. È davvero un'utilità spudy con tutto ciò che può fare. Mi piacerebbe dargli un colpo. Mi piace il Knockout Generator per creare modellini di vista strutturati veloci. È finora il migliore che ho trovato per avermi dato una shell con cui lavorare all'interno di JS. – Jason

1

Sì e no. Ma più "No" a "Sì.

Non c'è niente che creerà direttamente JavaScript classi dalle classi NET. È possibile passare il dati avanti e indietro, che è quello che @ collegamento del jbabey è di circa, ma si non li possono utilizzare in modo intercambiabile.

È potrebbe scrivere codice C# che scrivere le classi alla pagina come essi rendono (in modo che è possibile convertire il JSON in un oggetto all'altro capo) utilizzando riflessione per iterare su tutte le proprietà e i costruttori pubblici, ma non si è ancora in grado di copiare la funzionalità .

+0

Non stavo davvero cercando la funzionalità dei metodi per essere copiati. Sarei felice solo con le proprietà.Script # è stato candidato solo pochi minuti fa ma non l'ho ancora provato. Dato che .NET fornisce * funzionalità * come questa già con C# in IL, F # in IL, e VB.NET in IL, avrei pensato che la stessa cosa fosse disponibile per C# in javascript. –

3

Puoi provare JSIL. Ti permetterà di trasformare da .Net IL in JavaScript.

1

Abbiamo scoperto che Nik Hilk ha un progetto chiamato Script # che genererà equivalenti javascript dal codice C# 2.0. Questo ha risolto efficacemente la mia domanda per la semplice classe C# per i componenti javascript. La cosa veramente bella è che Script # funzionerà bene anche con jQuery e la mia Knockout View Models! :-)

Link to Script#

+1

Questo link è obsoleto. Ecco il repository github: https://github.com/nikhilk/scriptsharp – hofnarwillie

2

Si potrebbe provare sharp2Js. Passa un tipo e lo converte in una stringa C#. Usalo con un modello T4 se vuoi che venga emesso su un file js. Per la classe nel tuo esempio, produce:

utilizzarlo con il tuo esempio:

var str = Castle.Sharp2Js.JsGenerator. 
       GenerateJsModelFromTypeWithDescendants(typeof(Appraiser), true, "example"); 

Uscite:

example = {}; 

example.Appraiser = function (cons, overrideObj) { 
    if (!overrideObj) { overrideObj = { }; } 
    if (!cons) { cons = { }; } 
    var i, length; 
    this.appraiserId = cons.appraiserId; 
    this.appraiserName = cons.appraiserName; 


    this.$merge = function (mergeObj) { 
     if (!mergeObj) { mergeObj = { }; } 
     this.appraiserId = mergeObj.appraiserId; 
     this.appraiserName = mergeObj.appraiserName; 
    } 
} 

Nota: Sono il manutentore di sharp2Js, è giovane e quindi non ricco di funzionalità ancora (qualsiasi suggerimento è benvenuto) ma può soddisfare le tue esigenze per usi semplici.

Problemi correlati