2013-02-12 12 views
5

Tôi muốn hiển thị một lớp tôi đã viết bằng C# xuống tương đương javascript.Tạo mã tự động từ lớp C# sang JavaScript tương đương

ví dụ tôi có một lớp học như:

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

và tôi muốn khả năng tự động tạo ra một phiên bản của lớp này trong javascript

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

Đây có phải là có thể với JSON.NET hoặc Một phương pháp khác?

+0

Xem http://stackoverflow.com/questions/3455456/how-to-translate-between-programming-languages/3460977#3460977 –

+1

Tôi cho rằng một người có thể sử dụng Swagger (bây giờ là OpenAPI) cho cùng một điều (bây giờ) –

Trả lời

1

tôi biết tôi necro'ing một câu hỏi cũ, nhưng có một vài lựa chọn những ngày này.

Có một Class to Knockout Generator cho Visual Studio sẽ tạo Chế độ xem trực tiếp cho bạn. Ngoài ra, nếu bạn nhận được vào Typescript - sử dụng Web Essentials "Generate Typescript" tùy chọn trên một lớp học sẽ giúp bạn có được rất nhiều cách có.

+1

Jason, tuyệt vời tìm! Tôi thực sự cũng thấy rằng dự án đôi khi trước khi tôi đăng câu hỏi này. Vẫn thực sự tuyệt vời tìm thấy. Tôi thực sự cảm thấy như VS sẽ có thể chuyển đổi C# POCOs thành Typecript POCOs OOB. –

+1

Tôi đã tìm thấy Web Essentials là một ... tốt, cần thiết ... mở rộng để thêm vào Visual Studio. Nó có tất cả khả năng đó để đưa các lớp C# và tạo ra các định nghĩa kiểu từ chúng - cộng với tự động xử lý LESS với CSS để rút gọn CSS, cũng như JS để rút gọn JS. Nó thực sự là một tiện ích spiffy với tất cả mọi thứ nó có thể làm. Tôi khuyên bạn nên cho nó một shot. Tôi thích Trình tạo Knockout để tạo chế độ xem có cấu trúc nhanh. Nó cho đến nay là tốt nhất tôi đã tìm thấy cho tôi một vỏ để làm việc với bên trong JS. – Jason

1

Có và không. Nhưng "Không" hơn "Có"

Không có gì trực tiếp tạo lớp javascript từ lớp .NET của bạn. Bạn có thể chuyển qua số dữ liệu qua lại, đó là liên kết của @ jbabey, nhưng bạn không thể sử dụng chúng thay thế cho nhau

Bạn có thể viết các lớp vào trang khi chúng hiển thị trên tất cả các thuộc tính công cộng và các nhà xây dựng, nhưng bạn vẫn không thể sao chép các chức năng giữa chúng.

+0

Tôi đã không thực sự tìm kiếm chức năng của các phương thức để sao chép. Tôi chỉ vui với những tài sản.Tôi đã xem Script # như một ứng viên chỉ vài phút trước nhưng chưa thử nó. Kể từ .NET cung cấp * chức năng * như thế này đã có với C# để IL, F # đến IL, và VB.NET để IL tôi đã có thể nghĩ rằng điều tương tự có thể đã có sẵn để C# để javascript. –

3

Bạn có thể thử JSIL. Nó sẽ cho phép bạn chuyển đổi từ .Net IL sang JavaScript.

1

Phát hiện ra rằng Nik Hilk có một dự án có tên là Script # sẽ tạo ra tương đương javascript từ mã C# 2.0. Điều này có hiệu quả giải quyết câu hỏi của tôi cho đơn giản C# lớp để các thành phần javascript. Điều thực sự gọn gàng là Script # cũng sẽ hoạt động tốt với jQuery và các Mô hình Xem Knockout của tôi! :-)

Link to Script#

+1

Liên kết đó đã cũ. Đây là repo github: https://github.com/nikhilk/scriptsharp – hofnarwillie

2

Bạn có thể thử sharp2Js. Bạn vượt qua nó một loại và nó chuyển đổi nó thành một chuỗi C#. Sử dụng nó với mẫu T4 nếu bạn muốn nó xuất ra tệp js. Đối với các lớp trong ví dụ của bạn, nó tạo ra:

Sử dụng nó với ví dụ của bạn:

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

Đầu ra:

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

Lưu ý: Tôi là duy trì sharp2Js, đó là trẻ vì vậy không giàu tính năng (bất kỳ đề xuất nào đều được chào đón) nhưng nó có thể phù hợp với nhu cầu sử dụng đơn giản của bạn.

Các vấn đề liên quan