Вопрос

У меня есть клиент WCF, который должен генерировать запрос, содержащий этот фрагмент XML:

<reason xsi:nil="true" nullFlavor="NA" typeCode="RSON" />

Схема определяется сервером и не под управлением моим контролем. Сгенерированный прокси-код имеет класс для элемента причины, содержащий (среди прочего) свойств nullFlavor а также typeCode. Отказ Прокси использует XMLSerializer.

Как я могу генерировать такой фрагмент? XMLSerializer испускает xsi:nil атрибут только в том случае, если соответствующий член нулевой. И если это NULL, он не может очень хорошо иметь свойства, которые будут излучаться в качестве атрибутов!

Кстати, фрагмент законно в соответствии с спецификацией экземпляра XML схемы XML, который говорит, что элемент Nil не может содержать элементы дочерних элементов или внутреннего текста, но мая содержать атрибуты.

Это было полезно?

Решение

Это известное ограничение XMLSerializer. Возможно, вы сможете обойти его с некоторым умным использованием интерфейса IXMLSERializable и излучаем XML вручную - к сожалению, нет чистого решения, которое я знаю.

Другие советы

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

[XmlAttributeAttribute( AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance" )]
public bool NillAtt
{
    get
    {
        return this.nillAtt;
    }
    set
    {
        nillAtt = value;
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top