7

我想将我用 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 或其他方法可以做到这一点吗?

4

5 回答 5

4

你可以试试sharp2Js。您将类型传递给它,然后它将其转换为 C# 字符串。T4如果您希望它输出到 js 文件,请将其与模板一起使用。对于您示例中的类,它产生:

将它与您的示例一起使用:

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,它还很年轻,所以功能还不丰富(欢迎任何建议),但它可能适合您对简单用途的需求。

于 2015-10-23T02:10:53.770 回答
2

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

于 2013-02-12T22:17:38.657 回答
1

是和不是。但更多的是“不”而不是“是”。

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

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

于 2013-02-12T21:59:39.407 回答
1

我知道我正在解决一个老问题,但是这些天有一些选择。

有一个用于 Visual Studio的淘汰生成器类,它将为您创建淘汰视图模型。此外,如果您进入 Typescript - 在课堂上使用 Web Essentials“生成 Typescript”选项将使您获得很多帮助。

于 2015-01-22T14:25:01.553 回答
0

发现 Nik Hilk 有一个名为 Script# 的项目,它将从 C# 2.0 代码生成 javascript 等效项。这有效地解决了我对简单 C# 类到 javascript 组件的问题。真正巧妙的是 Script# 也可以很好地与 jQuery 和我的 Knockout 视图模型一起使用!:-)

链接到脚本#

于 2014-02-27T18:06:11.180 回答