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

9

我希望将我写的一个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或其他方法实现这个功能是否可行?

请参阅 https://dev59.com/anA75IYBdhLWcg3wJFYL#3460977 - Ira Baxter
1
我想一个人可能会使用Swagger(现在是OpenAPI)来做完全相同的事情(现在)。 - Mr. Young
5个回答

5
你可以尝试使用 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 的维护者,它还很年轻,所以功能不太丰富(欢迎任何建议),但对于简单的用途可能会满足您的需求。

3
你可以尝试使用JSIL。它可以将.Net IL转换为JavaScript。

1
是和不是。但是更多的是“不”而不是“是”。
没有直接从.NET类创建javascript类的方法。您可以来回传递数据,这就是@jbabey的链接所涉及的内容,但不能互换使用。
您可以编写C#代码,在渲染页面时将类写入页面中(以便在另一端将JSON转换回对象),方法是使用反射迭代所有公共属性和构造函数,但仍无法复制功能性。

我并不是真的想要方法的功能被复制。只有属性也可以让我满意。我刚刚几分钟前看了一下Script#,但还没有尝试过。由于.NET已经提供了类似这样的功能,比如C#到IL、F#到IL和VB.NET到IL,我认为同样的事情可能也适用于C#到JavaScript。 - Mr. Young

1
我知道我正在回答一个旧问题,但现在有几个选择。
Visual Studio有一个Class to Knockout Generator可以为您创建Knockout Viewmodels。此外,如果您使用Typescript - 在类上使用Web Essentials的“生成Typescript”选项将使您完成大部分工作。

1
Jason,太棒了!实际上,在我发布这个问题后不久,我也找到了那个项目。真的是个很好的发现。我真的觉得VS应该能够将C# POCOs转换为Typescript POCOs OOB(开箱即用)。 - Mr. Young
1
我发现Web Essentials是一个非常必要的扩展程序,可以添加到Visual Studio中。它具有将C#类转换为TypeScript定义的能力,而且可以自动处理LESS到CSS到压缩CSS,以及JS到压缩JS。它真的是一个非常棒的实用工具,可以做很多事情。我建议你试试。我喜欢使用Knockout Generator来快速创建结构化视图模型。到目前为止,这是我发现的最好的为我在JS内部提供外壳的工具。 - Jason

0
发现 Nik Hilk 有一个叫做 Script# 的项目,它可以从 C# 2.0 代码生成 JavaScript 等效代码。这有效地解决了我对于将简单的 C# 类转换成 JavaScript 组件的问题。真正不错的是,Script# 还可以很好地与 jQuery 和我的 Knockout 视图模型一起使用! :-)

Script# 链接


2
那个链接已经失效了。这是 Github 仓库的链接:https://github.com/nikhilk/scriptsharp - hofnarwillie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接