ÂĦmâd Ŝâlâĥ Ответов: 2

Корневой элемент отсутствует при десериализации XML, ASP


я получаю xml-файл из службы, но у меня есть проблема, когда я хочу
Deserialize 
чтобы возразить, всегда показывай мне
root element is missing 



XML


<?xml version="1.0" encoding="utf-8"?>
<ArrayOfResultInfo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/">
<ResultInfo>
<PartNumber>KRPA-4007</PartNumber>
<Manufacturer>test</Manufacturer>

</ResultInfo>
</ArrayOfResultInfo>







код

string xml = null;
     WebRequest req = WebRequest.Create(link);
     req.Credentials = CredentialCache.DefaultCredentials;
     WebResponse res = req.GetResponse();
     Stream dataStream = res.GetResponseStream();
     StreamReader reader = new StreamReader(dataStream);
     xml = reader.ReadToEnd();
     XmlSerializer serializer = new XmlSerializer(typeof(ArrayOfResultInfo));
     var result = (ArrayOfResultInfo)serializer.Deserialize(reader);


Что я уже пробовал:

строка xml = null;
WebRequest req = WebRequest.Создать (ссылка);
запрос.Учетные Данные = CredentialCache.Свойство defaultcredentials;
WebResponse res = req.метод GetResponse();
Stream dataStream = res. GetResponseStream();
StreamReader reader = новый StreamReader(поток данных);
xml = reader. ReadToEnd();
Помощью которого XmlSerializer сериализатор = новый сериализатор XmlSerializer(typeof на(ArrayOfResultInfo));
var result = (ArrayOfResultInfo)сериализатор.Десериализация (читатель);

Graeme_Grant

Где находятся классы, с которыми вы сопоставляете XML?

ÂĦmâd Ŝâlâĥ

нет проблем в классе я использую select nude также 0 результат,,, но я вижу проблему здесь

атрибут xmlns:xsd-файл="http://www.w3.org/2001/XMLSchema" атрибутов xmlns:xsi в="http://www.w3.org/2001/XMLSchema-instance" атрибутов xmlns="http://tempuri.org/"


но как удалить это из читателя перед десериализацией

2 Ответов

Рейтинг:
2

Praneet Nadkar

Привет,

Следующий код работал для меня с вашим xml:

string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><ArrayOfResultInfo xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://tempuri.org/\"><ResultInfo><PartNumber>KRPA - 4007 </PartNumber><Manufacturer> test </Manufacturer></ResultInfo></ArrayOfResultInfo>";



           var serializer = new XmlSerializer(typeof(ArrayOfResultInfo));
           ArrayOfResultInfo result;

           using (TextReader reader = new StringReader(xml))
           {
               result = (ArrayOfResultInfo)serializer.Deserialize(reader);
           }

           Console.WriteLine(result.ResultInfo.Manufacturer);
           Console.WriteLine(result.ResultInfo.PartNumber);

           Console.ReadLine();


Классы для xml следующие:
[XmlRoot(ElementName = "ResultInfo", Namespace = "http://tempuri.org/")]
public class ResultInfo
{
    [XmlElement(ElementName = "PartNumber", Namespace = "http://tempuri.org/")]
    public string PartNumber { get; set; }
    [XmlElement(ElementName = "Manufacturer", Namespace = "http://tempuri.org/")]
    public string Manufacturer { get; set; }
}

[XmlRoot(ElementName = "ArrayOfResultInfo", Namespace = "http://tempuri.org/")]
public class ArrayOfResultInfo
{
    [XmlElement(ElementName = "ResultInfo", Namespace = "http://tempuri.org/")]
    public ResultInfo ResultInfo { get; set; }
    [XmlAttribute(AttributeName = "xsd", Namespace = "http://www.w3.org/2000/xmlns/")]
    public string Xsd { get; set; }
    [XmlAttribute(AttributeName = "xsi", Namespace = "http://www.w3.org/2000/xmlns/")]
    public string Xsi { get; set; }
    [XmlAttribute(AttributeName = "xmlns")]
    public string Xmlns { get; set; }
}


Надеюсь, это поможет !


Рейтинг:
1

Graeme_Grant

Это может вам помочь: Преобразование XML в классы C# [^]


ÂĦmâd Ŝâlâĥ

спасибо но проблема здесь


атрибут xmlns:xsd-файл="http://www.w3.org/2001/XMLSchema" атрибутов xmlns:xsi в="http://www.w3.org/2001/XMLSchema-instance" атрибутов xmlns="http://tempuri.org/"


но как удалить это из читателя перед десериализацией

Graeme_Grant

Вы не удаляете их, это обрабатывается как часть процесса десериализации.