При десериализации сообщается, что ожидался объект ArrayOfMyObject, а принимается MyObjects - C#
Формулировка задачи:
при запросе с вебсервиса приходит ответ в виде:
не получается распарсить в List<MyObject>. При десериализации пишет, что ожидался объект ArrayOfMyObject, а принимается MyObjects.
Сделал класс:
Принимает пустой лист, видимо ожидает следующую конструкцию:
Нужно принять List. Как это сделать?
Код десериализатора:
<MyObjects> <MyObject> <id>1</id> <name>test</name> </MyObject> </MyObjects>
[DataContract(Namespace = "")] public class MyObjects { [DataMember] public List<MyObject> MyObjectList; }
<MyObjects> <MyObjectList> <MyObject>
public static T Deserialize<T>(string xml) { using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(xml))) { var serializer = new DataContractSerializer(typeof(T)); T theObject = (T)serializer.ReadObject(stream); return theObject; } }
Решение задачи: «При десериализации сообщается, что ожидался объект ArrayOfMyObject, а принимается MyObjects»
textual
Листинг программы
using System; using System.Collections.Generic; using System.IO; using System.Xml.Serialization; namespace ConsoleApplication20 { public static class Programm { public static void Main() { string s = @"<?xml version=""1.0"" encoding=""UTF-8""?> <MyObjects> <MyObject> <id>1</id> <name>test_1</name> </MyObject> <MyObject> <id>2</id> <name>test_2</name> </MyObject> <MyObject> <id>3</id> <name>test_3</name> </MyObject> </MyObjects>"; using (var str = new StringReader(s)) { var ser = new XmlSerializer(typeof (List<MyObject>), new XmlRootAttribute("MyObjects")); var deserialize = (List<MyObject>)ser.Deserialize(str); foreach (var myObject in deserialize) { Console.WriteLine(myObject); } } } } public class MyObject { public string id { get; set; } public string name { get; set; } public override string ToString() { return string.Format("id = {0}, name = {1}", id, name); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д