Параметр Web API не десериализуется (имеет значение null), если отсутствует элемент XML - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть модель, определенная для моего веб-API:

public class MyRequest
{
    public int id { get; set; }
    public string name { get; set; }
    public short? location { get; set; }
}

Функция принимает модель в качестве параметра:

public MyResponse Post(MyRequest request)
{
    ...
    doSomeStuff();
    ...
}

Мне нужны как имя, так и свойства местоположениямодель по желанию.Если они не переданы, функция должна видеть их как нулевые и оценивать их как таковые.

Это работает нормально, когда данные передаются как JSON:

{
    "id":100,
    "location":1
}

Запросдесериализован, и объект имеет идентификатор 100, ноль для имени и местоположение 1.

Однако это не работает для XML:

<MyRequest>
    <id>100</id>
    <location>1</location>
</MyRequest>

Объект запросаnull - я предполагаю, потому что объект не может десериализоваться.Если я добавлю отсутствующий элемент в запрос XML, он будет работать правильно.Так что я знаю, что функция и форматирование XML / вызова правильные.Проблема возникает только в том случае, если элемент отсутствует.

Я попытался добавить [XmlElement(IsNullable = true)] к свойствам, которые я хотел бы сделать необязательными, но это не имеет значения.

Примечание.используя XmlSerializer вместо DataContractSerializer по умолчанию.

Любая помощь будет принята с благодарностью.

...