Обнаружена ошибка элемента при десериализации потока XML - PullRequest
2 голосов
/ 25 февраля 2012

Я пытаюсь десериализовать поток XML и получаю следующую ошибку:

Ошибка в строке 1 позиции 7. Ожидается элемент 'auth' из пространства имен 'http://schemas.datacontract.org/2004/07/Veracross'.. Обнаружен элемент' с именем 'auth', пространство имен ''.

Поток XML, который я десериализирую, выглядит следующим образом:

<auth>
    <status>success</status>
    <username>jsmith</username>
    <person_pk>1234</person_pk>
    <security_roles>Parent</security_roles>
</auth>

Мой код:

[DataContract(Name = "auth")]
public class Authorization
{
    [DataMember(Name = "status")]
    public string Status { get; set; }
    [DataMember(Name = "username")]
    public string UserName { get; set; }
    [DataMember(Name = "security_roles")]
    public string SecurityRoles { get; set; }
}

// Some code here receiving the XML and storing in a string (xmlData)

DataContractSerializer serializer = new DataContractSerializer(typeof(Authorization));
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(xmlData));
Authorization Auth = (Authorization)serializer.ReadObject(stream);

Полагаю, он недоволен XML-файлом barebones (без информации заголовка), но я не контролирую его. Он потребляется из службы RESTful.

1 Ответ

0 голосов
/ 28 января 2015

(Ответ от ОП в редактировании вопроса. Преобразован в вики-ответ сообщества. См. Вопрос без ответов, но проблема решена в комментариях (или расширена в чате) )

ОП написал:

Я решил проблему, немного изменив строку xmlData.

string xmlData = client.DownloadString(restURL);
string fixedXMLData = xmlData.Replace("<auth>", "<auth xmlns=\"http://schemas.datacontract.org/2004/07/Veracross\">");
DataContractSerializer serializer = new DataContractSerializer(typeof(Authorization));
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(fixedXMLData));

Добавив пространство имен, он ожидал, что все заработало.

...