Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在单个服务中同时使用DataContractSerializer和XmlSerializer_C#_Wcf_Datacontractserializer_Xmlserializer - Fatal编程技术网

C# 在单个服务中同时使用DataContractSerializer和XmlSerializer

C# 在单个服务中同时使用DataContractSerializer和XmlSerializer,c#,wcf,datacontractserializer,xmlserializer,C#,Wcf,Datacontractserializer,Xmlserializer,我有一个WCF服务,类似于: [ServiceContract] ServiceInterface { [OperationContract] FirstResponse FirstOperation(){} [OperationContract] SecondResponse SecondOperation(){} } 我希望在客户端得到XML响应。据我所知,它使用的是DataContractSerializer。但是在FirstResponse中,我有一个

我有一个WCF服务,类似于:

[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