2011-11-06 11 views
18

既存のC#オブジェクトを表すクライアントサイドのjavascriptオブジェクトモデルを迅速に生成するための既存の実績のあるソリューションを探します。私はそこにT4テンプレートや他のアプローチがあると思いますが、それを見つけるための用語がありません。私は、シリアライゼーションについて、既存のC#オブジェクトインスタンスのJSON表現またはデシリアライゼーションとは何かを得るためのものではありません。私は単に20 + C#オブジェクト用のjavascriptオブジェクトモデルを生成したいと思いますし、C#コードが変更された場合には瞬時にそれらを再生成できるようにしたいと考えています。は、C#オブジェクトから自動的にjavascriptオブジェクトモデルを生成します

オーバー簡素化私が探しているものの例:

C#コード:

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

JavaScriptオブジェクトモデル生成する:

@Baszz

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

JSONデータ交換のためのテキストベースの標準であり、それは私が探しているものではありません。私は、javascriptファイルに入れて、そのスクリプトをさまざまなWebページにリンクできる20以上のオブジェクトのクライアント側APIを生成する必要があります。

JavaScriptSerializerは、AC#オブジェクトから以下のような文字列を吐き出すことができます。

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

をしかし、これは同じものではありません:JSON文字列に名前が付いていない

function Cat() 
{ 
    this.Name = ""; 
    this.Breed = ""; 
} 
  1. 関数。
  2. すべての要素は、必要な形式にするために文字列を手動で解析する必要があるJSON形式で引用されます。
  3. あなたが新しいアップ以下のような猫のインスタンスを理由#1

するvar myCatは=新しい猫()のことはできません。

私は誰もがこれを手で行っているかどうかはまったく推測していないので、多くのコメントはありません。私の独自のT4テンプレートを作成して、C#ファイルを解析し、クライアント側のAPIを生成します。

+0

このアプローチで達成しようとしていることを説明すると、面白いアイデアが役立つかもしれません。たとえば、これらのオブジェクトがどのように使用されているか。 –

+1

こんにちは、私はあなたの質問を似たようなものを書くことを考えるときに見つけました。どちらも。これは私が欲しいものです。 Entity FrameworkとMVC4を使ってREST APIを完成させ、素晴らしい自動テストを行っています。今、これらのサービスを呼び出すためにクライアントから使用されるjavascriptライブラリを作成したいと思います。私は直接javascriptを書く必要はなく、APIとオブジェクトモデルから自動的に生成することを楽しむでしょう。もちろん、私はこれが反映されていることを知っており、これは今私が行くかもしれない方向です。しかし、これを見つけることはより良いでしょう – pabloelustondo

答えて

5

数え切れないほどの検索の後、私が探しているものに近いものは見つかりませんでした。明らかに、過去数年間、みんながJSONの話題に巻き込まれ、誰もクライアント側のオブジェクトモデルを自動生成していません。私はCodesmithとT4のテンプレートを調べました。コードファイルを解析するためのメカニズムも組み込まれていません。どちらも、開発者の肩に100%置かれているプロパティとそのタイプを取得するために、リフレクションに飛ぶ必要があります。 CodesmithやT4のテンプレートがあなたに与えるメリットは何ですか?もちろん、あなたのリフレクションコードを再利用可能なクラスライブラリに置き、コンソールアプリケーションから呼び出すこともできます。これはまさに私がやったことです。

0

私があなたの話を理解できるかどうかはわかりませんが、Reflectionを使用すると、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、それは新しく、まだ多くはありませんが、おそらくそれはあなたのようなシナリオに役立つことができます。

関連する問題