3

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

4

1 回答 1

1

您可以通过使用XmlSerializerFormat属性装饰您的方法来指定XmlSerializer应该用于序列化:

[ServiceContract]
ServiceInterface
{
    [OperationContract]
    [XmlSerializerFormat]
    FirstResponse FirstOperation(){}

    [OperationContract]
    SecondResponse SecondOperation(){}
}

编辑:我忘了提到,如果你想FirstResponse用 XmlSerializer 进行序列化,那么就不需要该类型的DataContract/DataMember属性。您可以为 XmlSerializer 设置它,如下所示:

public class FirstResponse
{
    [XmlAttribute]
    public int id;

    [XmlElement]
    public string type1;
}

您可以根据您希望类型序列化的方式来改变序列化属性。如果您有根本不想序列化的成员,那么您需要指定[XmlIgnore]这些成员,因为XmlSerializeropt-out 与DataContractSerializer.

于 2012-08-21T13:10:09.290 回答