У меня есть объект:Xmlserializer nillable элемент с xmlattribute, возможно?
class Thing {
[Xmlarray("Widget", IsNullable=true) ]
List<Widget> Widgets;
}
class Widget {
[Xmlattribute]
public string Name;
[XmlTextAttribute]
public string Value;
}
В основном я хочу пример вывода выглядеть следующим образом:
<Thing>
<Widget name="foo" xsi:nil="true"/>
<Widget name="bar">Nerds</Widget>
</Thing>
Проблема я испытываю, что XmlSerializer не делает, что для Foo линии. Он не записывает бит xsi:nil
для виджетов, у которых есть Value
, содержащий нуль. Это просто пустой элемент (<Widget name="foo"/>
Парсер, который заканчивает употребление этого Xml, является старым, мусором и из-под контроля. Он ожидает, что он будет отсутствовать, если я хочу, чтобы эта запись виджетов удалялась из ее системы/хранилища (это то, что он делает, если нулевой бит отсутствует в пустой записи Widget).
Извините, если есть ошибки, написав их на мобильном телефоне. По сути, как мне получить xmlserializer, чтобы записать бит nil ?
ОБНОВЛЕНИЕ: Вот теги. Я читаю смутные вещи о том, как нельзя установить nillable, если есть атрибут на arrayitem (виджет в списке Widgets).
<Widget xsi:nil="true"/>
бесполезно для меня, как я упомянул - запись нужно имя атрибута и ноль = истина (она указывает процессору «это поле, удалить его из магазина»). Без атрибута name он не знает, в каком поле. К сожалению, это зависит только от xsi: nil, чтобы сказать это. Если он видит пустой номер <Widget name="foo"/>
- он устанавливает его пустым/пустым, а не полностью удаляется.
class Thing{
[System.Xml.Serialization.XmlArrayItemAttribute("Widget", IsNullable=true)]
public List<Widget> Widgets { get; set; }
}
class Widget{
[System.Xml.Serialization.XmlAttribute][JsonProperty]
public string name {get;set;}
[System.Xml.Serialization.XmlTextAttribute]
public string Value {get;set;}
}
По сути, это не может быть <Widget name="foo"><Value>Bar</Value></Widget>
или <Widget xsi:nil=true/>
или <Widget name="foo"/>
- должны быть <Widget name="foo" xsi:nil="true"/>
только. Вините процессор, к которому эта вещь отправляется (я не контролирую).
Итак, это сериализуемо?
Возможно, я неправильно написал атрибут Xmlarray. Это подсказка для сериализации, которая принимает IsNullable. К сожалению, я не могу изменить конечный результат. Он питается дрянным старым и ловким процессором, который не всегда работает правильно. – Jason
Когда я войду в офис и с телефона, я отредактирую сообщение, чтобы он стал более понятным и предоставил ссылку на мою проблему. – Jason
Я обновил сообщение, чтобы включить лучшую информацию. – Jason