Ошибка при десериализации XML

226
20 сентября 2017, 09:33

Есть xml

<string xmlns="http://www.webserviceX.NET">
   <NewDataSet>
      <Table>
         <AtomicNumber>1</AtomicNumber>
         <ElementName>Hydrogen</ElementName>
         <Symbol>H</Symbol>
         <AtomicWeight>1.00797</AtomicWeight>
         <BoilingPoint>20.400000000000002</BoilingPoint>
         <IonisationPotential>13.6</IonisationPotential>
         <EletroNegativity>2.2</EletroNegativity>
         <AtomicRadius>0.37</AtomicRadius>
         <MeltingPoint>14</MeltingPoint>
         <Density>0.08375</Density>
      </Table>
   </NewDataSet>
</string>

а вот этот код

string xml = requst
var serializer = new XmlSerializer(typeof(Parametres));
Parametres result;
using (TextReader reader = new StringReader(xml))
{
    result = (Parametres)serializer.Deserialize(reader);
}

при десериализации говорит

"В документе XML(1,2) присутствует ошибка"

P.S. xml валидатором проверял

P.S.S код класса Parametres

using System.Reflection;
namespace PeriodicTable
{
    public class Parametres
    {
        public string AtomicNumber { get; set; }
        public string ElementName { get; set; }
        public string Symbol { get; set; }
        public string AtomicWeight { get; set; }
        public string BoilingPoint { get; set; }
        public string IonisationPotential { get; set; }
        public string EletroNegativity { get; set; }
        public string AtomicRadius { get; set; }
        public string MeltingPoint { get; set; }
        public string Density { get; set; }
    }
}
Answer 1

Вам придется добавить классы-обертки для того, чтобы добраться до нужного элемента при десериализации (или вручную вырезать его из XML). Вариант с классами-обертками выглядит примерно так:

[XmlRoot(Namespace = "http://www.webserviceX.NET", ElementName ="string")]
public class Response
{
    public NewDataSet NewDataSet { get; set; }
}
public class NewDataSet
{
    public Parametres Table { get; set; }
}
public class Parametres
{
    public byte AtomicNumber { get; set; }
    public string ElementName { get; set; }
    public string Symbol { get; set; }
    public decimal AtomicWeight { get; set; }
    public decimal BoilingPoint { get; set; }
    public decimal IonisationPotential { get; set; }
    public decimal EletroNegativity { get; set; }
    public decimal AtomicRadius { get; set; }
    public byte MeltingPoint { get; set; }
    public decimal Density { get; set; }
}
string xml = @"
<string xmlns=""http://www.webserviceX.NET"">
<NewDataSet> <Table> <AtomicNumber>1</AtomicNumber> <ElementName>Hydrogen</ElementName> <Symbol>H</Symbol> <AtomicWeight>1.00797</AtomicWeight> <BoilingPoint>20.400000000000002</BoilingPoint> <IonisationPotential>13.6</IonisationPotential> <EletroNegativity>2.2</EletroNegativity> <AtomicRadius>0.37</AtomicRadius> <MeltingPoint>14</MeltingPoint> <Density>0.08375</Density> </Table> </NewDataSet>
</string>";
var serializer = new XmlSerializer(typeof(Response));
Parametres result;
using (TextReader reader = new StringReader(xml))
{
    result = ((Response)serializer.Deserialize(reader)).NewDataSet.Table;
}
READ ALSO
IO.FileSystemWatcher HDD просыпается по непонятной причине

IO.FileSystemWatcher HDD просыпается по непонятной причине

Как нужно правильно написать программу для перехвата причины, по которой HDD выходит из сна? Или как написать программу мониторинга чтения...

210
webClient возвращает 403 или 500

webClient возвращает 403 или 500

Хочу узнать данные по этой ссылке

191
Изменить размер массива через unsafe

Изменить размер массива через unsafe

Экскурс к тому, для чего нужно:

219
Проблемы паттерна `Singleton`

Проблемы паттерна `Singleton`

Изучая паттерн Singleton столкнулся с тем ,что классическая реализация данного паттерна очень хромает в плане потокобезопасности и что Lazy-реализация...

172