C# 子类化和数据契约
我正在使用以下代码:C# 子类化和数据契约,c#,wcf,C#,Wcf,我正在使用以下代码: [ServiceContract] public interface IUserAccountService { [OperationContract] UserAccountResponse CreateNewUserAccount(UserAccountRequest userAccountRequest); } public abstract class BaseResponse { public bool Success { get; se
[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; }
}
我的问题是:
如果希望序列化基类中的项,则必须将DataContract应用于基类,并将DataMember应用于要在基类中序列化的项。但是,如果您不希望对基类中的任何内容进行序列化,则不需要在基类上指定DataContract 从:
将DataContractAttribute应用于基类时,派生类型不会继承该属性或行为。但是,如果派生类型具有数据协定,则基类的数据成员将被序列化。但是,必须将DataMemberAttribute应用于派生类中的新成员,以使其可序列化如果希望序列化基类中的项,则必须将DataContract应用于基类,并将DataMember应用于将在基类中序列化的项。但是,如果您不希望对基类中的任何内容进行序列化,则不需要在基类上指定DataContract 从:
将DataContractAttribute应用于基类时,派生类型不会继承该属性或行为。但是,如果派生类型具有数据协定,则基类的数据成员将被序列化。但是,必须将DataMemberAttribute应用于派生类中的新成员,以使其可序列化是的,您必须在BaseResponse和UserAccountResponse上使用[DataContract]。您还必须为每个子类使用[KnownType]属性,如下所示
[KnownType(typeof(UserAccountResponse))]
[DataContract]
public abstract class BaseResponse
{
...
}
是的,您必须在BaseResponse和UserAccountResponse上使用[DataContract]。您还必须为每个子类使用[KnownType]属性,如下所示
[KnownType(typeof(UserAccountResponse))]
[DataContract]
public abstract class BaseResponse
{
...
}
当我遇到这样的问题时,使用WCF,我喜欢使用一个名为soapui的工具发出请求并查看结果。如果您弄错了,您将在请求和响应中看到缺少的XML。我从最少的属性开始,并根据需要添加它们。我使用免费版本,它已经成为任何与SOAP相关的开发中我必须使用的工具。当我有类似的问题时,使用WCF,我喜欢使用一个名为soapui的工具来发出请求并查看结果。如果您弄错了,您将在请求和响应中看到缺少的XML。我从最少的属性开始,并根据需要添加它们。我使用免费版本,它已经成为我在任何SOAP相关开发中必须使用的工具。