在单个服务中使用DataContractSerializer和XmlSerializer

时间:2012-08-21 12:11:58

标签: c# wcf datacontractserializer xmlserializer

我有一个类似的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作为属性。

1 个答案:

答案 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