Tôi có một lớp mà tôi cần để có thể tuần tự hóa thành một biến phiên SQLServer và có sẵn trên một dịch vụ WCF. Tôi đã tuyên bố nó như sauTại sao tôi không thể sử dụng WCF DataContract và ISerializable trên cùng một lớp?
namespace MyNM
{
[Serializable]
[DataContract(Name = "Foo", Namespace = "http://www.mydomain.co.uk")]
public class Foo : IEntity, ISafeCopy<Foo>
{
[DataMember(Order = 0)]
public virtual Guid Id { get; set; }
[DataMember(Order = 1)]
public virtual string a { get; set; }
DataMember(Order = 2)]
public virtual Bar c { get; set; }
/* ISafeCopy implementation */
}
[Serializable]
[DataContract(Name = "Bar ", Namespace = "http://www.mydomain.co.uk")]
public class Bar : IEntity, ISafeCopy<Bar>
{
#region Implementation of IEntity
DataMember(Order = 0)]
public virtual Guid Id { get; set; }
[DataMember(Order = 1)]
public virtual Baz y { get; set; }
#endregion
/* ISafeCopy implementation*/
}
[Serializable]
[DataContract]
public enum Baz
{
[EnumMember(Value = "one")]
one,
[EnumMember(Value = "two")]
two,
[EnumMember(Value = "three")]
three
}
Nhưng khi tôi thử và gọi dịch vụ này, tôi nhận được lỗi sau trong nhật ký theo dõi.
"System.Runtime.Serialization.InvalidDataContractException: Loại 'BarProxybcb100e8617f40ceaa832fe4bb94533c' không thể ISerializable và có DataContractAttribute thuộc tính."
Nếu tôi lấy ra thuộc tính Serializable, dịch vụ WCF hoạt động, nhưng khi đối tượng không thể được nối tiếp thành phiên. Nếu tôi loại bỏ các thuộc tính DataContract từ lớp Bar, các dịch vụ WCF thất bại nói
Loại 'BarProxy3bb05a31167f4ba492909ec941a54533' với tên hợp đồng dữ liệu 'BarProxy3bb05a31167f4ba492909ec941a54533: http://schemas.datacontract.org/2004/07/' không mong đợi. Thêm bất kỳ loại không biết tĩnh vào danh sách các tiếng loại - ví dụ, bằng cách sử dụng các thuộc tính KnownTypeAttribute hoặc bằng thêm chúng vào danh sách các loại được biết đến truyền cho DataContractSerializer
Tôi đã thử thêm thuộc tính KnownType cho lớp foo
[KnownType(typeof(Bar))]
Nhưng tôi vẫn gặp lỗi tương tự.
Có ai có thể giúp tôi với điều này không?
Rất cám ơn
Dave
Xin cảm ơn, tôi sẽ đọc ngay bây giờ. – Dave
Cảm ơn - cuối cùng, những gì tôi đã làm là tạo bản sao của các lớp học của tôi và trả lại cho họ qua dịch vụ. – Dave
sẽ là tốt đẹp để có câu trả lời thực tế ở đây, chứ không phải là một liên kết như các diễn đàn hiện đang xuống để bảo trì ... –