2011-09-26 34 views
1

我們試圖使用Web服務(Soap)並使用SvcUtil.exe爲該模式生成適配器。我們有場指定模式無效的XmlSerializer

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; 

} 
+0

另請參見問題:http://stackoverflow.com/questions/1009895/svcutil-exe-proxy-generated-not-allowing-for-nullable-fields – dwarring

回答

2

你嘗試使用(xxxSpecified屬性),如果您使用的是MessageContract不適的行爲。它僅適用於XmlSerializer。您已經正確指定應該使用XmlSerializer進行操作。但是,因爲您還指定要使用MessageContracts,所以XmlSerializer只能在下一級序列化中使用 - 即序列化每個消息成員時。