【问题标题】:XmlSerializer with Specified pattern not working具有指定模式的 XmlSerializer 不起作用
【发布时间】:2011-09-27 09:25:28
【问题描述】:

我们正在尝试使用 Web 服务 (Soap),并已使用 SvcUtil.exe 为架构生成了一个适配器。我们有一个字段

recurrenceCount

除非它有值,否则不应提供,因此我们添加了一个属性

recurrenceCountSpecified

根据MSDN 。即使recurrenceCountSpecified 为false,字段recurrenceCount 属性仍然在传出xml 中指定。

我们做错了什么?

适配器代码:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel","3.0.0.0")]  [System.ServiceModel.ServiceContractAttribute(Namespace="http://sas.elluminate.com/", ConfigurationName ="SASDefaultAdapterV2Port")] 
public interface SASDefaultAdapterV2Port 
{
     [System.ServiceModel.OperationContractAttribute(Action="http://sas.elluminate.com/setSession",ReplyAction = "*")]      
     [System.ServiceModel.FaultContractAttribute(typeof(sas.elluminate.com.ErrorResponse), Action = "http://sas.elluminate.com/setSession", Name="ErrorResponse")] 
     [System.ServiceModel.XmlSerializerFormatAttribute()]
     sessionResponseCollection setSession(setSessionRequest request); 
}

修改后的类是:

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel","3.0.0.0")]
[System.ServiceModel.MessageContractAttribute(WrapperName="setSession", WrapperNamespace = "http://sas.elluminate.com/",IsWrapped = true)]
public partial class setSessionRequest
{

     [System.Xml.Serialization.XmlIgnoreAttribute()]       
     public bool recurrenceCountSpecified;

     [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://sas.elluminate.com/", Order = 19)]
     public int recurrenceCount;

}

【问题讨论】:

标签: .net xml-serialization


【解决方案1】:

如果您使用的是 MessageContract,则您尝试使用的行为(xxxSpecified 属性)不适用。它仅适用于 XmlSerializer。您已正确指定应将 XmlSerializer 用于该操作。但是,因为您还指定要使用 MessageContracts,所以 XmlSerializer 仅在下一个序列化级别启动 - 即在序列化每个消息成员时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多