2013-02-01 35 views
6

Tôi hiện đang tạo một .NET C# API. Tôi có nhiều lớp học, và một số trong số đó phải được chuyển qua một dịch vụ RESTJSON. Ví dụ, tôi có thể có một đối tượng tài khoản với rất nhiều doanh nghiệp meta-data:Tự động tạo các lớp DataContract từ các lớp đối tượng kinh doanh

public class Account 
{ 
    public ComplicatedClass SomeProperty { get; set; } 
    public string SomeOtherProperty { get; set; } 
} 

Có rất nhiều lớp học, và nhiều hơn nữa được lồng nhau (như chứng minh bằng tài sản ComplicatedClass loại). Để tránh làm ngập này kinh doanh-đối tượng với [DataMember], vv Các thuộc tính đó sẽ làm cho lớp này một mớ hỗn độn, tôi muốn thực hiện một DTO cho JSON:

public class AccountDTOForJSON 
{ 
    [DataMember(Name="someProperty")] 
    public ComplicatedClassDTOForJson SomeProperty { get; set; } 

    [DataMember(Name="someOtherProperty")] 
    public string SomeOtherProperty { get; set; } 
} 

Vấn đề của tôi là, có dường như không có bất kỳ công cụ (mà tôi có thể tìm thấy) để tự động tạo các lớp học DataContract này và cũng cung cấp mã cho các thuộc tính ánh xạ qua lại.

Tôi có thể, tất nhiên, làm tất cả công việc này theo cách thủ công (trường hợp xấu nhất) hoặc cuộn công cụ của riêng tôi để tạo/bản đồ (trường hợp xấu thứ hai). Nhưng, tôi muốn biết đầu tiên nếu đã có một công cụ để làm điều này loại mà tôi có thể sử dụng để tiết kiệm thời gian của mình.

Trả lời

2

Đây là một câu hỏi hay. Tôi thực sự sẽ làm một cái gì đó tương tự như nó trong một dự án tôi đang làm việc trên.

Tôi khuyên bạn nên có hai vấn đề ở đây: đầu tiên là tạo mã DTO từ đối tượng kinh doanh của bạn và thứ hai là thực hiện ánh xạ giữa đối tượng kinh doanh và DTO.

Tôi không thể tìm thấy trình tạo mã cho mục đích này sau khi chi tiêu khoảng một nửa giờ trên Google. Có lẽ tôi không tìm kiếm điều đúng, hoặc có thể không có ai ở đó (vì vậy nếu ai đó biết về một, xin vui lòng kêu vang trong). Công cụ duy nhất tôi thấy có vẻ hứa hẹn là NHydrate (http://www.codeproject.com/Articles/42885/NHydrate-Code-Generator), nhưng tôi đã không thực sự tải xuống hoặc thử nghiệm nó.

Công cụ ánh xạ mà tôi đã sử dụng trong quá khứ là AutoMapper (https://github.com/AutoMapper/AutoMapper/wiki/Getting-started) - nó sẽ cố gắng tìm ra mối quan hệ giữa các đối tượng kinh doanh và DTO của bạn và sẽ có thể thực hiện ánh xạ hai chiều.

+0

Xin cảm ơn! Tôi rất vui vì tôi không phải là người duy nhất gặp phải điều này .. Tôi cũng không thể tìm thấy bất cứ điều gì. Tôi đã tìm thấy AutoMapper mà bạn đã nói, nhưng tôi cảm thấy như tôi phải cuộn máy phát điện, tôi cũng có thể cuộn người lập bản đồ của riêng tôi nữa .. Nó rất kỳ lạ không ai chạy vào điều này được nêu ra .. – automaton

+0

có nó sẽ được mát mẻ với một công cụ như trình phân tích cú pháp json trực tuyến http://json.parser.online.fr/ nếu nó có thể hiển thị mã C# datacontract cũng - Tôi đã sử dụng trình phân tích cú pháp json trực tuyến để giúp tôi thực hiện tác vụ tạo DataMembers thủ công - công việc tẻ nhạt và có thể tạo một trình phân tích cú pháp đơn giản – serup

1

Tôi đã làm điều này trước khi theo:

  1. Sử dụng công cụ XSD để tạo schemas từ lắp ráp DTO biên soạn của bạn.
  2. Sử dụng svcutil để tạo DataContracts từ XSD được tạo ra ở bước 1.


Edit:

Ở trên giả định rằng lớp Account của bạn là một DTO (kể từ khi dấu hiệu duy nhất mà bạn đưa ra trong ví dụ của bạn là nó chứa hai thuộc tính vì vậy tôi cho rằng nó chỉ được sử dụng để chuyển trạng thái và không xác định hành vi). Nếu đúng như vậy và bạn chỉ muốn phiên bản DataContract của lớp Tài khoản thì thao tác trên sẽ hoạt động. Bạn vẫn phải cung cấp mã để ánh xạ lớp Account đến lớp có thể nối tiếp Account (do svcutil tạo).

+0

Tôi nghĩ bạn đã hiểu nhầm - Tôi chưa có ** tệp DTO nào được tạo nhưng đó là những gì tôi muốn tạo. Tất cả những gì tôi có là đối tượng kinh doanh. – automaton

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