C# 在单个服务中同时使用DataContractSerializer和XmlSerializer
我有一个WCF服务,类似于:C# 在单个服务中同时使用DataContractSerializer和XmlSerializer,c#,wcf,datacontractserializer,xmlserializer,C#,Wcf,Datacontractserializer,Xmlserializer,我有一个WCF服务,类似于: [ServiceContract] ServiceInterface { [OperationContract] FirstResponse FirstOperation(){} [OperationContract] SecondResponse SecondOperation(){} } 我希望在客户端得到XML响应。据我所知,它使用的是DataContractSerializer。但是在FirstResponse中,我有一个
[ServiceContract]
ServiceInterface
{
[OperationContract]
FirstResponse FirstOperation(){}
[OperationContract]
SecondResponse SecondOperation(){}
}
我希望在客户端得到XML响应。据我所知,它使用的是DataContractSerializer
。但是在FirstResponse中,我有一个数据成员,我希望它作为XML中的属性。我已经读过了,但是DataContractSerializer不支持它。解决方案是使用XmlSerializer
,但这会降低效率。
因此,我想知道是否可以对一个操作使用XmlSerializer
,对其余服务使用DataContractSerializer
。如果是,怎么做?将第一响应类视为:
[DataContract]
public class FirstResponse
{
[DataMember]
public int id;
[DataMember]
public string type1;
}
我希望id作为一个属性。您可以通过使用以下属性装饰您的方法来指定应将
XmlSerializer
用于序列化:
[ServiceContract]
ServiceInterface
{
[OperationContract]
[XmlSerializerFormat]
FirstResponse FirstOperation(){}
[OperationContract]
SecondResponse SecondOperation(){}
}
编辑:我忘了提到,如果您想用XmlSerializer序列化FirstResponse
,那么就不需要该类型的DataContract
/DataMember
属性。您可以按如下方式为XmlSerializer设置它:
public class FirstResponse
{
[XmlAttribute]
public int id;
[XmlElement]
public string type1;
}
您可以根据您想要序列化类型的方式来更改。如果您有完全不希望序列化的成员,则需要在这些成员上指定[XmlIgnore]
,因为XmlSerializer
与DataContractSerializer
不同,它是opt-out