Как создать элемент xsi: nil с атрибутами? - PullRequest
1 голос
/ 27 октября 2010

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 14 декабря 2015

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

[XmlAttributeAttribute( AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance" )]
public bool NillAtt
{
    get
    {
        return this.nillAtt;
    }
    set
    {
        nillAtt = value;
    }
}
1 голос
/ 27 октября 2010

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

...