При десериализации сообщается, что ожидался объект ArrayOfMyObject, а принимается MyObjects - C#

Узнай цену своей работы

Формулировка задачи:

при запросе с вебсервиса приходит ответ в виде:
Листинг программы
  1. <MyObjects>
  2. <MyObject>
  3. <id>1</id>
  4. <name>test</name>
  5. </MyObject>
  6. </MyObjects>
не получается распарсить в List<MyObject>. При десериализации пишет, что ожидался объект ArrayOfMyObject, а принимается MyObjects. Сделал класс:
Листинг программы
  1. [DataContract(Namespace = "")]
  2. public class MyObjects
  3. {
  4. [DataMember]
  5. public List<MyObject> MyObjectList;
  6. }
Принимает пустой лист, видимо ожидает следующую конструкцию:
Листинг программы
  1. <MyObjects>
  2. <MyObjectList>
  3. <MyObject>
Нужно принять List. Как это сделать? Код десериализатора:
Листинг программы
  1. public static T Deserialize<T>(string xml)
  2. {
  3. using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
  4. {
  5. var serializer = new DataContractSerializer(typeof(T));
  6. T theObject = (T)serializer.ReadObject(stream);
  7. return theObject;
  8. }
  9. }

Решение задачи: «При десериализации сообщается, что ожидался объект ArrayOfMyObject, а принимается MyObjects»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Xml.Serialization;
  5.  
  6. namespace ConsoleApplication20
  7. {
  8.     public static class Programm
  9.     {
  10.         public static void Main()
  11.         {
  12.             string s = @"<?xml version=""1.0"" encoding=""UTF-8""?>
  13. <MyObjects>
  14.  <MyObject>
  15.    <id>1</id>
  16.    <name>test_1</name>
  17.  </MyObject>
  18.  <MyObject>
  19.    <id>2</id>
  20.    <name>test_2</name>
  21.  </MyObject>
  22.  <MyObject>
  23.    <id>3</id>
  24.    <name>test_3</name>
  25.  </MyObject>
  26. </MyObjects>";
  27.  
  28.             using (var str = new StringReader(s))
  29.             {
  30.                 var ser = new XmlSerializer(typeof (List<MyObject>), new XmlRootAttribute("MyObjects"));
  31.                 var deserialize = (List<MyObject>)ser.Deserialize(str);
  32.                 foreach (var myObject in deserialize)
  33.                 {
  34.                     Console.WriteLine(myObject);
  35.                 }
  36.             }
  37.         }
  38.     }
  39.  
  40.     public class MyObject
  41.     {
  42.         public string id { get; set; }
  43.         public string name { get; set; }
  44.         public override string ToString()
  45.         {
  46.             return string.Format("id = {0}, name = {1}", id, name);
  47.         }
  48.     }
  49. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы