Vâng, đó sẽ làm việc.
DataContractAttribute
có Inherited
đặt thành false, vì vậy cần áp dụng thuộc tính cho cả lớp con và lớp cha mẹ (như bạn đã làm trong câu hỏi).
Bạn cần sử dụng thuộc tính
KnownType
nếu bạn muốn sử dụng hợp đồng dữ liệu của mình với đa hình.
Ví dụ
[ServiceContract]
interface MyWcfContract
{
[OperationContract]
HandleData(ConsoleData contractData);
}
Nếu bạn gọi phương pháp như vậy:
SomeData someData = new SomeData { Description = "Test", Volume = 30 };
// The method is expecting a ConsoleData instance,
// I'm passing a SomeData instance instead
myWcfProxy.HandleData(someData);
Sau đó deserializer vào cuối vụ sẽ không biết rằng đó là một thể hiện của SomeData
, chỉ một thể hiện của ConsoleData
mà nó đang mong đợi. Cách khắc phục điều này là đăng ký lớp SomeData
dưới dạng kiểu đã biết của ConsoleData
.
Nguồn
2011-12-18 22:12:26
Có. Bạn đang cố gắng làm gì với hai hợp đồng dữ liệu đó? –