Skip to main content

Posts

Showing posts with the label xml

DataContract and XMLIgnore attribute

Intr-un post anterior am discutat despre cum putem sa serializam un IDictionary in format XML. In mod normal o clasa care nu este decorata cu atributul DataContract o sa poata fi serializata folosind DataContractSerializer fara nici o problema. In acest caz, toate proprietatiile si field-urile publice o sa fie serializate. In specificatiile la DataContractSerializer, ne este specificat ca orice atribut folosit pentru serializare in format XML (XmlIgnore, XmlArray, Serializable etc.) sunt ignorate. Totusi cand obiectul de mai jos era serializat, atributul XmlIgnore este luat in considerare. public Foo { public string Name { get; set; } [XmlIgnore] public string Value { get; private set; } } In prima faza cea ce se intampla este destul de ciudat. In mod normal acesta nu ar trebui sa fie ignorat, dar practic proprietatea este ignorata in totalitate. In realitate DataContractSerializer functioneaza asa cum ne-am astepta. Dar ...

Adnotare enum cu mai multe valori

Cand dorim sa serializam un enum putem sa atasam la valoarea fiecarui item din enum atributul XmlEnumAttribute . Astfel la serializare/deserializare o sa putem lucra cu o valoarea string nu cu o valoare numerica. Pana aici nici o problema, dar cum facem sa obtinem doar aceasta valoarea si nu un xml care contine si aceasta valoarea . De exemplu pentru enum-ul: public enum Dimension { [XmlEnum(Name="BigT")] Big [XmlEnum(Name="SmallT")] Small } am obține folosindu-ne de XmlSerializer un output care contine si un nod care specifica ce tip de data ii. Pentru a putea sa obtinem doar valoare BigT sau SmallT putem sa apelam la reflection si sa iteram prin atributele item-ului respectiv pana ajungem la un atribut de tip XmlEnumAttribute . Acuma, daca ducem problema umpic mai departe, putem sa ajungem la cazuri in care elementele din enum au diferite valori. De exemplu daca lucram cu doua sau mai multe aplicații, putem sa avem doua sau mai multe reprezentări...

MSMQ - mesaje in format XML

MSMQ este folosit foarte des folosit în aplicațiile destok pentru a comunica intre doua sau mai multe procese. Citirea si scrierea unui mesaj in MSMQ se face extrem de simplu: //Creare de mesaj. System.Messaging.Message message = new System.Messaging.Message(); message.Body = "some text"; message.Label = "Test message"; //Initializare MSMQ. var msmq; if(MessageQueue.Exists(@".\Private$\NumeQueue")) { msmq = new System.Messaging.MessageQueue(@".\Private$\NumeQueue"); } else { msmq = MessageQueue.Create(@".\Private$\NumeQueue"); } /Trimitere mesaj msmq.Send(message);. /Citire mesaj. try { message = mq.Receive(new TimeSpan(0, 0, 10)); } catch { //Executa ceva in caz de eroare. } Pentru a primii un mesaj, putem sa ne inregistram la evenimentul "ReceiveCompleted" a unui MessageQueue. Daca o sa încercam sa trimitem prin MSMQ un mesaj cu conținut XML de genul: <Text> <Valoare>Test</Valoar...