У меня есть куча классов С#, которые автоматически генерируются из XSD. Затем я создаю файлы XML на основе этих классов С#. Пока ничего не существует.
Проблема:
Сгенерированные XML файлы проходят проверку, а для проверки требуется дополнительный атрибут для всех тегов XML с помощью xsi:nil="true"
. В основном теги должны выглядеть так: <testTag.01 xsi:nil="true" NV="123123" />
, но я не могу добиться этого в С#. Мой код:
if (myObject.TestTag.HasValue) { t.testTag01 = new testTag01(); t.testTag01.Value = myObject.TestTag.Value; } //else //{ // t.testTag01 = new testTag01(); // t.testTag01.NV = "123123";//Not Recorded //}
Этот код генерирует <testTag.01>SomeValue</testTag.01>
или <testTag.01 xsi:nil="true"/>
.
Если я раскомментирую ELSE, результатом будет: <testTag.01>SomeValue</testTag.01>
или <testTag.01 NV="123123" />
.
Поэтому я не знаю, как добраться до формата, который требуется инструментом проверки. Любые идеи?
P.S.
Вот авто-сгенерированный класс С#:
///[System.CodeDom.Compiler.GeneratedCodeAttribute( "xsd", "4.0.30319.33440" )] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute( "код" )] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = верно, Пространство имен = "http://www.blabla.org" )]
открытый частичный класс testTag01 {
private string nvField; private SomeEnum valueField; /// <remarks/> [System.Xml.Serialization.XmlAttributeAttribute()] public string NV { get { return this.nvField; } set { this.nvField = value; } } /// <remarks/> [System.Xml.Serialization.XmlTextAttribute()] public SomeEnum Value { get { return this.valueField; } set { this.valueField = value; } } }
Я бы не хотел изменять эту часть, но я понимаю, что это невозможно без этого. Также я попытался установить SomeEnum как Nullable. public SomeEnum? Value
, но бросает исключение:
Cannot serialize member 'Value' of type System.Nullable`1[]. XmlAttribute/XmlText cannot be used to encode complex types.