2009-11-27 29 views
6

sự khác biệt giữa lớp mà không DataContract là những gì thuộc tính:DataContract & DataMember thuộc tính - làm thế nào chúng ảnh hưởng đến loại

public class BankOperationResult 
{   
    public int CurrentAmount { get; set; } 
    public bool Success { get; set; } 
} 

và cùng lớp với DataContract thuộc tính:

[DataContract] 
public class BankOperationResult 
{   
    [DataMember] 
    public int CurrentAmount { get; set; } 
    [DataMember] 
    public bool Success { get; set; } 
} 

Ý tôi là, thực hiện xử lý WCF hai loại đó theo cách khác nhau khi mã hóa vv?

Có hoặc không có những thuộc tính làm dịch vụ WCF của tôi ...

Cảm ơn, Pawel

Trả lời

10

Trước NET 3.5 SP1 nếu bạn không đánh dấu tài sản của bạn với một DataMember thuộc tính nó không được tiếp xúc trong WSDL và không được đăng. Bắt đầu từ .NET 3.5 SP1, DataContractSerializer sẽ tự động bao gồm tất cả các thuộc tính công khai, do đó bạn không còn cần phải trang trí chúng với thuộc tính này nữa.

+13

Thật không may, nó không * khá * đơn giản trong trường hợp 3,5 SP1, nhưng đó là ý tưởng cơ bản. Không có bất kỳ thuộc tính DataContract hoặc DataMember nào được định nghĩa trong lớp của bạn, tất cả các trường * và * sẽ được nối tiếp thành XML và bao gồm các trường lưu trữ tự động được tạo tự động cho các thuộc tính tự động của biểu mẫu 'public int MyValue {get; bộ; } 'và sẽ đặt tên cho chúng là' k__BackingField'. Thêm các thuộc tính DataContract và DataMember một cách rõ ràng sẽ có DataContractSerializer bỏ qua việc tuần tự hóa trường riêng. –

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