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

标签 c# wcf datacontractserializer xmlserializer

我有一个类似这样的 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/

相关文章:

C# Linq : Combine multiple . Where() with an *OR* 子句

c# - TransactionScope 性能问题

wcf - 警告 :Authentication error: ntlm authorization challenge expected, 但在 Soap UI 中找不到

c# - DataContractSerializer - 问题

c# - 使用 DataContractSerializer 时设置属性的初始值

c# - 将日期时间转换为 double

c# - HasOptional 对应的 DataAnnotation 属性

c# - 在 Silverlight App 上覆盖 Html 内容

wcf - 25 个并发异步 WCF 调用以使用任务进行编排

WCF “Maximum number of items that can be serialized or deserialized in an object graph is ' 6553 6'”