从C#类到JavaScript等效的自动代码生成

时间:2013-02-12 20:44:50

标签: c# javascript code-generation json.net

我想将我用C#编写的类暴露给javascript等价物。

例如我有一个类:

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

我希望能够在javascript中自动生成此类的版本

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

这可以用JSON.NET或其他方法吗?

5 个答案:

答案 0 :(得分:3)

您可以尝试JSIL。它将允许您从.Net IL转换为JavaScript。

答案 1 :(得分:2)

您可以尝试sharp2Js。您传递一个类型并将其转换为C#字符串。如果要将其输出到js文件,请将其与T4模板一起使用。对于示例中的类,它会生成:

将它与你的例子一起使用:

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

输出:

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

注意:我是sharp2Js的维护者,它很年轻,但功能不丰富(欢迎任何建议),但它可能适合您的简单用途。

答案 2 :(得分:1)

是和否。但更多"不"而且"是'。

没有什么可以直接从您的.NET类创建javascript类。您可以来回传递数据,这是@ jbabey的链接,但您无法互换使用它们。

可以编写C#代码,这些代码会在渲染时将类写入页面(这样你就可以将JSON转换回另一端的对象),方法是使用反射迭代所有的公共属性和构造函数,但您仍然无法在它们之间复制功能

答案 3 :(得分:1)

发现Nik Hilk有一个名为Script#的项目,它将从C#2.0代码生成javascript等价物。这有效地解决了我对简单的C#类到javascript组件的问题。非常简洁的东西是Script#也适用于jQuery和我的Knockout View Models! : - )

Link to Script#

答案 4 :(得分:1)

我知道我有一个老问题,但是现在有几个选择。

Visual Studio的Class to Knockout Generator将为您创建淘汰视图模型。此外,如果你进入Typescript - 使用Web Essentials" Generate Typescript"课程中的选项可以帮助你解决很多问题。