2011-11-06 41 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的维护者,它是新的,并且还没有做很多,但也许它可以帮助像你这样的场景。