Problem z deserializacją XML - DataContactSerialize

Odpowiedz Nowy wątek
2017-01-23 16:22
0

Witajcie.
Jest to mój pierwszy post z prośbą o pomoc, więc proszę o wyrozumiałość.
A teraz do rzeczy. Problem narodził się dziś dość niespodziewanie. Mam parę plików XML, które zawierają dane X. Pliki mają jakby się mogło wydawać prostą strukturę, więc jadę jeden po drugim, deserializuje do obiektu aż tu nagle w jednym z plików XML pojawiła się lista a mianowicie

<root>  
    <dane>   
        <x>1</x>    
        <y>2</y> 
        <z>3</z>
    </dane> 
    <dane>   
        <x>1</x>    
        <y>2</y> 
        <z>3</z>
    </dane> 
    <dane>   
        <x>1</x>    
        <y>2</y> 
        <z>3</z>
    </dane>     
</root>

przystąpiłem, więc do działania i postanowiłem utworzyć obiekty, które mi tego XML zdeserializowanego przechować

  [DataContract(Name = "root", Namespace = "")]
    public class MojModel
    {
        [DataMember(Name = "dane")]
        public MojaList MojeDane { get; set; }
    }

    //[CollectionDataContract(Name = "dane", Namespace = "")]
    [CollectionDataContract(ItemName = "dane", Namespace = "")]
    public class MojaList : List<MojeItemy> { }

    public class MojeItemy
    {
        [DataMember(Name = "x", Order = 1)]
        public string x { get; set; }

        [DataMember(Name = "y", Order = 2)]
        public string y { get; set; }

        [DataMember(Name = "z", Order = 3)]
        public string z { get; set; }
    }

następnie w jednej z metod rozpocząłem deserializację

 var stream = new MemoryStream(Encoding.UTF8.GetBytes(streamXML)); // streamXML to XML w postaci stringa
 XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(stream, new XmlDictionaryReaderQuotas());
 DataContractSerializer deserializer = new DataContractSerializer(typeof(MojModel));

 var result = (MojModel)deserializer.ReadObject(reader, true);

 reader.Close();

podsumowując, w którą stronę nie przerobię modelu to zawsze dostaję 0 elementów. Ktoś ma jakieś sugestie?
Przy bardziej płaskiej strukturze kod powyżej do deserializacji działa poprawnie, więc zakładam, że i przy tym XML nie powinien mieć problemów. Obstawiam uparcie, że może to być wina źle stworzonego modelu

edytowany 1x, ostatnio: MateuszDevVideo, 2017-01-23 16:23

Pozostało 580 znaków

2017-01-24 15:17
0

Temat do zamknięcia. Problem był w model. Wystarczyło ułożyć go tak jak poniżej :)

  [CollectionDataContract(Name = "root", Namespace = "")]
    public class MojModel
    {
        [DataMember(Name = "dane")]
        public MojaList MojeDane { get; set; }
    }

    [DataContract(ItemName = "dane", Namespace = "")] 
    public class MojeItemy
    {
        [DataMember(Name = "x", Order = 1)]
        public string x { get; set; }

        [DataMember(Name = "y", Order = 2)]
        public string y { get; set; }

        [DataMember(Name = "z", Order = 3)]
        public string z { get; set; }
    }

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0