Как опустить элемент XML в C # XML, созданный из XSD? - PullRequest
1 голос
/ 03 сентября 2010

Minoccurs равен 0 в XSD, и nillable имеет значение true для элемента.

Но если я не установлю значение элемента, оно принимает его как ноль, и запись на сервере отключается.Есть ли способ сказать ему, чтобы он пропускал элемент из выходного XML, когда некоторые условия удовлетворены, но имеют его для других случаев?

1 Ответ

2 голосов
/ 03 сентября 2010

Если вы используете XmlSerializer , вы можете контролировать, отправляется ли значение, включив свойство PropertyNameSpecified.

Другим вариантом является использование специального шаблона для создания логического поля, распознаваемого XmlSerializer, и применения атрибута XmlIgnoreAttribute к полю.Шаблон создается в виде propertyNameSpecified.Например, если есть поле с именем «MyFirstName», вы также создадите поле с именем «MyFirstNameSpecified», которое указывает XmlSerializer, генерировать ли элемент XML с именем «MyFirstName».

Например, есливы объявляете класс следующим образом:

public class Data
{
    [XmlIgnore]
    public bool CLS_CDSpecified { get; set; }
    [XmlElement(IsNullable=true)]
    public string CLS_CD { get; set; }
}

Затем вы ничего не можете сериализовать, явное значение nil или фактическое значение:

var serializer = new XmlSerializer(typeof(Data));

var serializesNothing = new Data();
serializesNothing.CLS_CD = null;
serializesNothing.CLS_CDSpecified = false;
serializer.Serialize(Console.Out, serializesNothing);
Console.WriteLine();
Console.WriteLine();

var serializesNil = new Data();
serializesNil.CLS_CD = null;
serializesNil.CLS_CDSpecified = true;
serializer.Serialize(Console.Out, serializesNil);
Console.WriteLine();
Console.WriteLine();

var serializesValue = new Data();
serializesValue.CLS_CD = "value";
serializesValue.CLS_CDSpecified = true;
serializer.Serialize(Console.Out, serializesValue);

Вывод:

<?xml version="1.0" encoding="IBM437"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema" />

<?xml version="1.0" encoding="IBM437"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <CLS_CD xsi:nil="true" />
</Data>

<?xml version="1.0" encoding="IBM437"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <CLS_CD>value</CLS_CD>
</Data>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...