我有一些wcf服务:
[ServiceContract(SessionMode = SessionMode.Allowed)]
public interface IMyService
{
[OperationContract]
[TransactionFlow(TransactionFlowOption.Allowed)]
FooResult GetFoo([NotNull] FooRequest request);
}
[DataContract(Name = "FooRequest", Namespace = "...")]
public class FooRequest
{
[DataMember(IsRequired = true)]
[NotNull]
public DateTime From { get; set; }
}
通过此服务,svcutil生成由DataContractSerializer序列化的类型。现在我添加返回DataTable的方法:
[OperationContract]
[TransactionFlow(TransactionFlowOption.Allowed)]
[FaultContract(typeof(IikoNetServiceFault))]
System.Data.DataTable GetDataTable();
现在svcutils生成的类型通过XmlSerializer序列化所有类型。但我需要所有类型(包括DataTable)都由DataContractSerializer序列化,或者只有DataTable由XmlSerializer序列化,但其他类型由DataContractSerializer序列化。
答案 0 :(得分:-1)
svcutil 实用程序会生成客户端代码,该代码对XmlSerializer无法处理的类型使用DataContractSerializer,否则这是默认选项。< / p>
但是,您可以强制 svcutil 使用一个序列化程序而使用/serializer
开关使用另一个序列化程序:
svcutil /serializer:DataContractSerializer http://server/myservice.svc
或者,您可以仅在GetDataTable
服务操作 上应用XmlSerializerFormatAttribute,以使其使用XmlSerializer合同的其余部分将继续使用DataContractSerializer:
[ServiceContract]
[DataContractFormat]
public interface IMyService
{
[OperationContract]
FooResult GetFoo(FooRequest request);
[OperationContract]
[XmlSerializerFormat]
DataTable GetDataTable();
}