我有一个类似这样的 WCF 服务:
[ServiceContract]
ServiceInterface
{
[OperationContract]
FirstResponse FirstOperation(){}
[OperationContract]
SecondResponse SecondOperation(){}
}
我想要客户端的 XML 响应。据我所知,它使用 DataContractSerializer
。但是在 FirstReponse 中我有一个数据成员,我想将其作为 XML 中的属性。我读过 DataContractSerializer
不支持它。解决方案是使用 XmlSerializer
但这会降低效率。
所以我想知道是否可以将 XmlSerializer
用于一项操作,将 DataContractSerializer
用于其余服务。如果是如何?将 FirstResponse 类视为:
[DataContract]
public class FirstResponse
{
[DataMember]
public int id;
[DataMember]
public string type1;
}
我想要 id 作为一个属性。
最佳答案
您可以通过使用 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
.
关于c# - 在单个服务中同时使用 DataContractSerializer 和 XmlSerializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12054567/