我正在使用以下代码:
[ServiceContract]
public interface IUserAccountService
{
[OperationContract]
UserAccountResponse CreateNewUserAccount(UserAccountRequest userAccountRequest);
}
public abstract class BaseResponse
{
public bool Success { get; set; }
public string Message { get; set; }
}
public class UserAccountResponse : BaseResponse
{
public int NewUserId { get; set; }
}
我的问题是:
答案 0 :(得分:1)
如果希望序列化基类中的项,则必须将DataContract应用于基类,并将DataMember应用于要在基类中序列化的项。但是,如果您不希望序列化基类中的任何内容,则不需要在基类上指定DataContract。
“将DataContractAttribute应用于基类时,派生类型不会继承属性或行为。但是,如果派生类型具有数据协定,则基类的数据成员将被序列化。但是,您必须将DataMemberAttribute应用于派生类中的新成员,以使它们可序列化。“
答案 1 :(得分:0)
是的,您必须在BaseResponse和UserAccountResponse上使用[DataContract]。您还必须为每个子类使用[KnownType]属性,如下所示。
[KnownType(typeof(UserAccountResponse))]
[DataContract]
public abstract class BaseResponse
{
...
}