Одно поле xml не может быть десериализовано с использованием класса XmlSerializer - PullRequest
0 голосов
/ 30 декабря 2011

У меня есть следующий xml:

<?xml version="1.0" encoding="UTF-8"?>
<connection_state>conn_state</connection_state>

Следуя msdn, я должен описать его как тип для правильной десериализации с использованием XmlSerializer. Таким образом, имя класса указывает на первый тег, а его поля - подтеги. Например:

public class connection_state
{
   public string state;
}

Будет преобразован в следующий xml:

<?xml version="1.0" encoding="UTF-8"?>
<connection_state>
    <state>conn_state</state>
</connection_state>

Но у xml, который я получаю, есть только один тег. И мы не можем создать поле с именем его класса, например:

public class connection_state
{
    public string connection_state;
}

Или может? Есть ли решение для этой проблемы?

Ответы [ 2 ]

3 голосов
/ 30 декабря 2011

Правильный Xml имеет корневой элемент без содержимого, кроме других элементов. Если вы застряли с этим крошечным psuedo-XML с одним тегом, есть ли причина, по которой вам нужно использовать XmlSerializer? Почему бы просто не создать класс с помощью конструктора, который принимает буквальную строку «Xml»:

using System.Xml.Linq;

public class connection_state {
    public string state { get; set; }
    public connection_state(string xml) {
        this.state = XDocument.Parse(xml).Element("connection_state").Value;
    }
}

Edit:

В ответ на комментарий ОП: у вас нет нам XmlSerializer; Вы можете просто прочитать ResponseStream напрямую и передать его в свой connection_state конструктор:

String xmlString = (new StreamReader(webResponse.GetResponseStream())).ReadToEnd();
connection_state c= new connection_state(xmlString);
0 голосов
/ 30 декабря 2011

Заменить

public class connection_state
{
   public string state;
}

до

public class connection_state
{
   public string state {set; get;}
}
...