Restsharp — ошибка при попытке сериализовать атрибут xmlns на корневом узле

При попытке сериализовать объект в XML с помощью RestSharp, который содержит атрибут xmlns на корневом узле, я получаю следующее исключение:

Префикс '' нельзя переопределить с '' на 'https://someurl.com' в одном и том же начале. тег элемента.

Объект, который я пытаюсь сериализовать, содержит только одно свойство (на данный момент), XmlNamespace:

[SerializeAs(Name = "root")]
public class Root
{
    [SerializeAs(Name = "xmlns", Attribute = true)] 
    public String XmlNamespace { get; set; }
}

Исключение возникает при попытке добавить мой объект в тело запроса, например:

Root requestBody = new Root();

requestBody.XmlNamespace = "https://someurl.com";

var request = new RestRequest();

request.Method = Method.POST;
request.Resource = "orders";
request.RequestFormat = DataFormat.Xml;

request.AddBody(requestBody); // exception occurs here

Я пытался использовать свойство XmlNamespace RestRequest, а также создать экземпляр нового XmlSerializer для RestRequest, но ни один из них не добавил пространство имен к корневому узлу, как того требует API, к которому я пытаюсь получить доступ. Кто-нибудь знает, как правильно сериализовать атрибут xmlns в RestSharp?


person Justin Joly    schedule 02.04.2015    source источник
comment
Вам нужно использовать пространство имен при создании элементов, вы не можете просто добавить к корню и изменить пространство имен элемента.   -  person joemfb    schedule 02.04.2015


Ответы (1)


Я нашел ответ. Похоже, меня сбило с толку наличие свойств XmlNamespace на уровне запроса и XmlSerializer. Для всех, кто сталкивается с этой проблемой, исправление состояло в том, чтобы определить пространство имен при вызове метода AddBody следующим образом:

request.AddBody(requestBody, "https://someurl.com"); 
person Justin Joly    schedule 02.04.2015