我想将我用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或其他方法吗?
答案 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! : - )
答案 4 :(得分:1)
我知道我有一个老问题,但是现在有几个选择。
Visual Studio的Class to Knockout Generator将为您创建淘汰视图模型。此外,如果你进入Typescript - 使用Web Essentials" Generate Typescript"课程中的选项可以帮助你解决很多问题。