XmlSerializer с указанным шаблоном не работает - PullRequest
1 голос
/ 26 сентября 2011

Мы пытаемся использовать веб-сервис (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;

}

1 Ответ

2 голосов
/ 27 сентября 2011

Поведение, которое вы пытаетесь использовать (свойства xxxSpecified), не применяется, если вы используете MessageContract. Это относится только к XmlSerializer. Вы правильно указали, что XmlSerializer должен использоваться для операции. Однако, поскольку вы также указали, что должны использоваться MessageContracts, XmlSerializer включается только на следующем уровне сериализации, т. Е. При сериализации каждого элемента сообщения.

...