Tôi có một lớp cơ sở với các thuộc tính DataMember trong đó. Tôi cũng có một lớp dẫn xuất với các thuộc tính DataMember trong đó. Trong dự án WCF của tôi, tôi đang quay trở lại lớp dẫn xuất. Có cách nào để tôi ngăn cản một thành viên trong lớp cơ sở của tôi từ tuần tự hóa không? Dưới đây là một số mã mẫu:WCF DataContract Loại trừ DataMembers Từ Đang tuần tự hóa trong các lớp có nguồn gốc
public class BaseClass
{
public string ShortDescription {get;set;}
public string LongDescription {get;set;}
}
public class DerivedClass : BaseClass
{
public List<Description> Descriptions {get;set;}
}
Trong mã này tôi muốn có thể ẩn thành viên được thừa kế ShortDescription và LongDescription vì chúng đã lỗi thời. Mọi nỗ lực làm như vậy đều không thành công. Dưới đây là những gì tôi đã cố gắng:
public class DerivedClass : BaseClass
{
[DataMember]
public List<Description> Descriptions {get;set;}
// override the base class members
[IgnoreDataMember]
public override string ShortDescription {get;set;}
[IgnoreDataMember]
public override string LongDescription {get;set;}
}
và
public class DerivedClass : BaseClass
{
[DataMember]
public List<Description> Descriptions {get;set;}
// shadow the base class members
[IgnoreDataMember]
public new string ShortDescription {get;set;}
[IgnoreDataMember]
public new string LongDescription {get;set;}
}
Không phải của các phương pháp đã làm việc. Loại "DerivedClass" khi đầu ra cho WSDL vẫn chứa các thành viên "Bỏ qua" của loại lớp cơ sở.
Bạn có thể thắc mắc tại sao tôi không chỉ thay đổi lớp cơ sở. Điều này là do tôi vẫn sử dụng lớp cơ sở ở dạng ban đầu của nó làm phiên bản trước của loại cho WSDL để hỗ trợ khả năng tương thích ngược cho người tiêu dùng. Bằng cách này tôi có thể có một cuộc gọi v1000 trả về BaseClass và một cuộc gọi V1010 trả về một DerivedClass. Tôi có thể thêm và thay đổi chức năng cho DerivedClass tất cả những gì tôi muốn mà không có khả năng ảnh hưởng đến người tiêu dùng của chức năng v1000.
Điều này tạo ra kết quả tương tự. Thật thú vị nếu tôi ghi đè lên và cung cấp thuộc tính [DataMember] trong một nỗ lực để nó hiển thị trong định nghĩa XML cho DerivedClass nó vẫn không hiển thị trong DerivedClass nhưng trong lớp cơ sở. – omatase
Hrmmpf ... yep, không hoạt động;) – Kwal