bạn định nghĩa để cho DataContractSerializer biết rằng một Client
là một loại Contact
.
Có một số cách để thực hiện việc này, nhưng tất cả đều xoay quanh việc sử dụng thuộc tính KnownType
hoặc thuộc tính ServiceKnownType
.
KnownType
có thể được đặt trên lớp Client
để thông báo cho DataContractSerializer rằng đó là KnownType là Contact
.
[DataContract]
[KnownType(typeof(Client))]
public class Contact{}
KnownType
cũng có thể được đặt trên lớp để cho biết khi nối tiếp lớp này, bạn cũng có thể gặp phải lớp khác này.
Bạn có thể muốn làm điều này nếu bạn có một lớp DataContract
rằng có một tài sản mà là một Contact
mà thực sự có thể chứa một Client
:
[DataContract]
[KnownType(typeof(Client))]
public class Meeting
{
Contact MeetingContact{get;}
}
Trong trường hợp này bạn có thể lấy đi mà không xác định KnownType trên khách hàng. Bạn cũng có thể muốn thực hiện việc này nếu bạn có thuộc tính trả về một bộ sưu tập và bạn muốn chỉ định các loại có thể có trong bộ sưu tập.
Bạn có thể, thay vì quy định cụ thể các loại thực tế của KnownType, chỉ định tên của một phương pháp tĩnh mà sẽ trả về các loại tiếng thay vì:
[DataContract]
[KnownType("GetKnownTypes")]
public class Meeting
{
Contact MeetingContact{get;}
private static Type[] GetKnownType()
{
return new Type[]{typeof(Client)};
}
}
Bạn cũng có thể xác định loại biết đến thông qua các configuration file.
ServiceKnownTypes làm việc theo một cách tương tự, nhưng được quy định trên Dịch vụ bản thân:
[ServiceKnownType(typeof(Client))]
[ServiceContract()]
public interface IMyServiceContract
{
[OperationContract]
Contact GetContact();
}
này thiết lập sẽ cho phép các DataContactSerializer biết rằng bất kỳ phương pháp có thể trở lại một loại loại Client
. Theo cách tương tự với các kiểu đã biết, bạn cũng có thể sử dụng một phương thức tĩnh để cung cấp các loại dịch vụ đã biết.
cảm ơn! chỉ hoạt động tốt – ancdev
không sao. Xin vui lòng chấp nhận như là một câu trả lời nếu đang làm việc. – daryal