我有一个类似的WCF服务:
[ServiceContract]
ServiceInterface
{
[OperationContract]
FirstResponse FirstOperation(){}
[OperationContract]
SecondResponse SecondOperation(){}
}
我想在客户端以XML格式进行响应。据我所知,它使用DataContractSerializer
。 BUD in FirstReponse我有一个数据成员,我想要作为XML中的属性。我读过虽然DataContractSerializer
不支持它。解决方案是使用XmlSerializer
,但这会影响效率。
所以我想知道是否可以将XmlSerializer
仅用于一个操作,并将DataContractSerializer
用于其余服务。如果有,怎么样?将FirstResponse类视为:
[DataContract]
public class FirstResponse
{
[DataMember]
public int id;
[DataMember]
public string type1;
}
我想将id作为属性。
答案 0 :(得分:2)
您可以通过使用XmlSerializerFormat属性修饰方法来指定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;
}
根据您希望类型序列化的方式,您可以改变serialization attributes。如果您有完全不想序列化的成员,那么您需要在这些成员上指定[XmlIgnore]
,因为XmlSerializer
选择退出而不是DataContractSerializer
。