Почему мой тип не сериализуется правильно XmlSerializer - PullRequest
0 голосов
/ 19 марта 2012

Первоначальная проблема заключалась в том, что когда я вызывал методы веб-службы (asmx) с типом, тип всегда проходил через нуль.Проверка мыла подтвердила, что тип был пустым элементом.Итак, я попробовал простой тест.
Вот мой тип, который, конечно, был сгенерирован из WSDL

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://dto12.api.echosign")]
public partial class SendDocumentInteractiveOptions {

    private bool authoringRequestedField;

    private bool authoringRequestedFieldSpecified;

    private bool autoLoginUserField;

    private bool autoLoginUserFieldSpecified;

    private bool noChromeField;

    private bool noChromeFieldSpecified;

    /// <remarks/>
    public bool authoringRequested {
        get {
            return this.authoringRequestedField;
        }
        set {
            this.authoringRequestedField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool authoringRequestedSpecified {
        get {
            return this.authoringRequestedFieldSpecified;
        }
        set {
            this.authoringRequestedFieldSpecified = value;
        }
    }

    /// <remarks/>
    public bool autoLoginUser {
        get {
            return this.autoLoginUserField;
        }
        set {
            this.autoLoginUserField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool autoLoginUserSpecified {
        get {
            return this.autoLoginUserFieldSpecified;
        }
        set {
            this.autoLoginUserFieldSpecified = value;
        }
    }

    /// <remarks/>
    public bool noChrome {
        get {
            return this.noChromeField;
        }
        set {
            this.noChromeField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public bool noChromeSpecified {
        get {
            return this.noChromeFieldSpecified;
        }
        set {
            this.noChromeFieldSpecified = value;
        }
    }
}

Теперь вот некоторый простой код для его сериализации.

SendDocumentInteractiveOptions sdio = new SendDocumentInteractiveOptions();
sdio.authoringRequested = true;
sdio.autoLoginUser = true;
sdio.noChrome = true;
XmlSerializer xmlSer = new XmlSerializer(typeof(SendDocumentInteractiveOptions));
XmlWriter xw = new XmlTextWriter(@"g:\test.xml", null);
xmlSer.Serialize(xw, sdio);
xw.Close();  

А вот итоговый XML

<?xml version="1.0"?&gt
&ltSendDocumentInteractiveOptions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>

Так что мне здесь не хватает.Почему мои публичные объекты не сериализуются?

1 Ответ

1 голос
/ 16 января 2013

Это довольно старый вопрос, ну да ладно. Я думаю, что решение может быть в другом вопросе «Почему мое публичное свойство не сериализовано XmlSerializer?» . В части ответа перечислены причины, по которым атрибут не будет сериализован, и в этом списке указано

  • у него есть открытое свойство bool FooSpecified {get; set;}, которое вернуло false

В вашем коде вы устанавливаете различные логические значения, но задаете соответствующие указанные значения. Я столкнулся с подобной проблемой, и установка указанного значения устранила его для меня.

...