2011-11-06 39 views
18

javascript對象模型尋找現有,實踐證明,溶液快速生成客戶端javascript對象模型代表現有C#對象。我想有一個T4模板或其他一些方法,但我缺乏找到它的術語。我不是在談論序列化來獲取現有c#對象實例的JSON表示或任何與反序列化有關的事情。我只想爲20個以上的c#對象生成JavaScript對象模型,並且如果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是一個基於文本的數據交換標準,這不是我正在尋找的。我需要生成一個包含20多個對象的客戶端API,這些對象可以放在一個JavaScript文件中,並將該腳本鏈接到我的各種網頁。

的JavaScriptSerializer可以從C#對象吐出一串象下面這樣:

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

但是,這是不一樣的東西:

function Cat() 
{ 
    this.Name = ""; 
    this.Breed = ""; 
} 
  1. JSON字符串是不是一個命名功能。
  2. 所有元素的引用而在JSON格式將需要串的人工分析來讓它進入我需要的格式。
  3. 你不能新建立一個目錄下面一樣,因爲#1

VAR myCat =新貓的實例();

不是很多意見,所以我猜每個人都用手或者根本沒有做到這一點。看看創建我自己的T4模板來解析c#文件並生成我的客戶端API。

+0

有趣的想法,它可能會幫助人們試圖提供答案,如果你解釋你通過這種方法試圖完成。例如,這些對象被使用了什麼/如何。 –

+1

嗨,我在考慮編寫類似的問題時發現了你的問題,我想知道我們是否可以嘗試使這個更通用並且滿足。都。這就是我要的。我使用Entity Framework和MVC4完成了一個REST API,並且都有很好的自動測試。現在,我想創建一個JavaScript庫,用於從ly客戶端調用這些服務。我會喜歡不必直接寫javascript,而是從API和對象模型自動生成。當然,我知道這可以通過反思來完成,這是我現在可能會走的方向。但是,找到這樣做會更好 – pabloelustondo

回答

5

無數次的搜索後,我找不到任何接近我要找的。顯然,過去幾年中,每個人都被JSON流行語所困擾,沒有人會自動生成客戶端對象模型。我看了Codesmith和T4模板。沒有任何內置的解析代碼文件的機制。兩者都要求你跳入反思,以獲得在開發者肩上100%的屬性和類型。一旦你跳過編寫所有反射代碼的喧囂,Codesmith或T4模板會給你帶來什麼好處?絕對沒有。你也介意將你的反射代碼放在可重用的類庫中,並從控制檯應用程序調用它,這正是我所做的。

0

我不知道如果我能明白你在說什麼,但如果你使用反射,你可以獲取有關C#代碼數據來生成JavaScript對象的信息。

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; 
    } 
} 

在有額外的元數據是一些腳手架以支持集合和複雜類型,並具有創建繼承對象以覆蓋行爲的能力等。

注意:我是t他是sharp2Js的維護者,它是新的,並且還沒有做很多,但也許它可以幫助像你這樣的場景。