2011-11-06 20 views
18

Tìm kiếm các giải pháp hiện có, đã được chứng minh để tạo nhanh một mô hình đối tượng javascript phía máy khách đại diện cho đối tượng C# hiện có. Tôi tưởng tượng có một mẫu T4 hoặc một số cách tiếp cận khác ra khỏi đó nhưng tôi thiếu thuật ngữ để tìm thấy nó. Tôi không nói về serialization để có được các đại diện JSON của một thể hiện đối tượng C# hiện có hoặc bất cứ điều gì để làm với deserialization. Tôi chỉ đơn giản muốn tạo mô hình đối tượng javascript cho hơn 20 đối tượng C# và tôi muốn có thể tạo lại chúng tại một thời điểm thông báo nếu mã C# thay đổi.tự động tạo mô hình đối tượng javascript từ C# object

ví dụ về Over-đơn giản hóa những gì tôi đang tìm kiếm:

C# code:

[Serializable()] 
public class Cat 
{ 
    public string Name { get; set; } 
    public string Breed { get; set; } 
} 

Javascript mô hình đối tượng được tạo ra:

function Cat() 
{ 
    this.Name = ""; 
    this.Breed = ""; 
} 

@Baszz

JSON là một tiêu chuẩn dựa trên văn bản để trao đổi dữ liệu và đó không phải là những gì tôi đang tìm kiếm. Tôi cần phải tạo một API phía máy khách của hơn 20 đối tượng mà tôi có thể đặt trong một tệp javascript và liên kết tập lệnh đó với các trang web khác nhau của tôi.

Các JavaScriptSerializer có thể nhổ ra một chuỗi như dưới đây từ aC# đối tượng:

{ "Name": "Hayden", "Breed": "Rabbit” } 

Nhưng đây không phải là điều tương tự như:

function Cat() 
{ 
    this.Name = ""; 
    this.Breed = ""; 
} 
  1. Chuỗi JSON được không phải là một tên chức năng.
  2. Tất cả các yếu tố được trích dẫn và ở định dạng JSON sẽ yêu cầu phân tích cú pháp thủ công chuỗi để đưa nó vào định dạng tôi cần.
  3. Bạn có thể không phải là mới-up một thể hiện của Cát như dưới đây vì # 1

var myCat = new Cat();

Không có nhiều nhận xét vì vậy tôi đoán mọi người làm điều này bằng tay hoặc hoàn toàn không. Xem xét việc tạo mẫu T4 của riêng tôi để phân tích cú pháp các tệp C# và tạo API của ứng dụng khách của tôi.

+0

Ý tưởng thú vị, nó có thể giúp mọi người cố gắng cung cấp câu trả lời nếu bạn giải thích những gì bạn đang cố gắng thực hiện bằng cách tiếp cận này. Ví dụ, những gì/làm thế nào các đối tượng đang được sử dụng. –

+1

Xin chào, tôi đã tìm thấy câu hỏi của bạn khi nghĩ về cách viết một câu hỏi tương tự và tôi tự hỏi liệu chúng tôi có thể cố gắng làm cho điều này trở nên chung chung và thỏa mãn hơn không. Cả hai. Đây là những gì tôi muốn. Tôi có một API REST được thực hiện với Entity Framework và MVC4 tất cả đều có các test tự động tốt đẹp. Bây giờ, tôi muốn tạo một thư viện javascript sẽ được sử dụng từ khách hàng ly để gọi các dịch vụ này. Tôi sẽ tận hưởng không phải viết javascript trực tiếp nhưng để tạo tự động từ API và mô hình đối tượng. Tất nhiên, tôi biết điều này có thể được thực hiện với sự phản ánh và đây là hướng tôi có thể đi ngay bây giờ. Nhưng, việc tìm kiếm việc này sẽ tốt hơn – pabloelustondo

Trả lời

5

Sau vô số tìm kiếm, tôi không thể tìm thấy bất kỳ thứ gì gần với những gì tôi đang tìm kiếm. Rõ ràng mọi người đều bị cuốn vào từ buzz của JSON vài năm qua và không ai tự động tạo ra các mô hình đối tượng phía máy khách. Tôi đã xem Codesmith và các mẫu T4. Không có bất kỳ cơ chế tích hợp nào để phân tích cú pháp các tệp mã. Cả hai yêu cầu bạn phải nhảy vào sự phản chiếu để có được các thuộc tính và các kiểu của chúng chiếm 100% trên vai của các nhà phát triển. Điều gì đặt ra câu hỏi một khi bạn nhảy qua hoop viết tất cả các mã phản ánh những gì lợi ích không Codesmith hoặc mẫu T4 cung cấp cho bạn? Hoàn toàn không có gì .. Bạn cũng nhớ đặt mã phản chiếu của mình vào thư viện lớp có thể sử dụng lại và gọi nó từ ứng dụng bảng điều khiển và đó chính xác là những gì tôi đã làm.

0

Tôi không chắc liệu tôi có thể hiểu bạn đang nói gì không, nhưng nếu bạn sử dụng Phản ánh, bạn có thể lấy dữ liệu về mã C# để tạo thông tin cho đối tượng javascript.

2

Đây là một câu hỏi cũ, nhưng bạn có thể thử sharp2Js. Đó là một thư viện được thiết kế để phản ánh trên các lớp của bạn và tạo ra các đối tượng javascript với một vài hàm tiện ích.

Chạy nó chống lại các ví dụ mà bạn cung cấp (và xuất chuỗi nó tạo ra trong một mẫu T4 hay cách khác):

string modelOutput = Castle.Sharp2Js.JsGenerator. 
      GenerateJsModelFromTypeWithDescendants(typeof(Cat), true, "example"); 

Tạo:

example = {}; 

example.Cat = function (cons, overrideObj) { 
    if (!overrideObj) { overrideObj = { }; } 
    if (!cons) { cons = { }; } 
    var i, length; 
    this.name = cons.name; 
    this.breed = cons.breed; 


    this.$merge = function (mergeObj) { 
     if (!mergeObj) { mergeObj = { }; } 
     this.name = mergeObj.name; 
     this.breed = mergeObj.breed; 
    } 
} 

Các siêu dữ liệu thêm vào đó là một số giàn giáo để hỗ trợ các bộ sưu tập và các loại phức tạp với khả năng tạo các đối tượng thừa kế để ghi đè hành vi, v.v.

Lưu ý: tôi không ông bảo trì của sharp2Js, và nó mới và không làm được nhiều, nhưng có lẽ nó có thể giúp cho các kịch bản như của bạn.

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