Avatar billede henrik_40 Juniormester
30. august 2016 - 16:55 Der er 2 kommentarer og
1 løsning

Serialisering af XML i C#

Hejsa
Nedenstående xml-streng, som jeg ønskera at serialisere:

Jeg ønsker at få fat på:
- merchantCode="DANFREUR"
- orderCode="2-d4186484c743"
- reference id="3054234213"
- reference = https://payments-test.worldpay.com/app


<?xml version="1.0" encoding="UTF-8"?>
<paymentService version="1.4" merchantCode="DANFREUR">
    <reply>
        <orderStatus orderCode="2c00286484c743">
            <reference id="3054233">
https://payments-est.worldpay.com/a47299817475202gGF_yXIZpho134rLgPcK2w
            </reference>
            </orderStatus>
    </reply>
</paymentService>



Jeg har prøvet mange muligheder, men her er en mulighed, som kun giver MerchantCode.

kan nogle hjælpe mig? Guide mig?

[Serializable()]
[XmlRoot("paymentService")]
public class paymentService
{
    [XmlAttribute("merchantCode")]
    public string merchantCode;

    [XmlElement("reply")]
    public orderStatus references;
}


public class orderStatus
{
  public string reference;
}

#region Attributes
// Attribute for
// PaymentService/reply/orderstatus/reference
public class Reference_ID
{
  [XmlAttribute]
  public int id { get; set; }
}

// Attribute for
// PaymentService/reply/orderStatus
public class OrderStatus_OrderCode
{
  [XmlAttribute]
  public string orderCode { get; set; }
}
Avatar billede arne_v Ekspert
30. august 2016 - 17:19 #1
Dine data klasser skal matche XML format praecist.

Fungerende kode:


using System;
using System.IO;
using System.Xml.Serialization;

namespace E
{
    [XmlRoot("paymentService")]
    public class PaymentService
    {
        [XmlAttribute]
        public string merchantCode { get; set; }
        [XmlElement]
        public Reply reply { get; set; }
    }
    public class Reply
    {
        public OrderStatus orderStatus { get; set; }
    }
    public class OrderStatus
    {
        [XmlAttribute]
        public string orderCode { get; set; }
        [XmlElement]
        public Reference reference { get; set; }
    }
    public class Reference
    {
        [XmlAttribute]
        public int id { get; set; }
        [XmlText]
        public string Text { get; set; }
    }
    public class Program
    {
        public static void Main(string[] args)
        {
            string xmlstr = @"<?xml version='1.0' encoding='UTF-8'?>
<paymentService version='1.4' merchantCode='DANFREUR'>
    <reply>
        <orderStatus orderCode='2c00286484c743'>
            <reference id='3054233'>
                https://payments-est.worldpay.com/a47299817475202gGF_yXIZpho134rLgPcK2w
            </reference>
        </orderStatus>
    </reply>
</paymentService>";
            XmlSerializer ser = new XmlSerializer(typeof(PaymentService));
            PaymentService o = (PaymentService)ser.Deserialize(new StringReader(xmlstr));
            Console.WriteLine(o.merchantCode);
            Console.WriteLine(o.reply.orderStatus.orderCode);
            Console.WriteLine(o.reply.orderStatus.reference.id);
            Console.WriteLine(o.reply.orderStatus.reference.Text);
            Console.ReadKey();
        }
    }
}
Avatar billede henrik_40 Juniormester
31. august 2016 - 09:45 #2
Hej Arne
1000 tak!

Det var en kæmpe hjælpe og meget lærerig kode.

Jeg lagde mærke til at du har fjernet mine navne på [XmlElement] og [XmlAttribute], men så fundet ud af at din property angiver xml'ens nøjagtige navn.

Så hvis man f.eks ønsker egen navngivning (KUNDENUMMER i nedenstående), kan man f.eks. omkskrive:
        [XmlAttribute]
        public string merchantCode { get; set; }

til
    [XmlAttribute("merchantCode")]
    public string KUNDENUMMER { get; set; }

og så SKAL [XmlAttribute], navngives.

Jeg skriver det bare for at orientere hvad jeg har fundet ud af ;)

/henrik
Avatar billede arne_v Ekspert
31. august 2016 - 13:30 #3
Korrekt.

Og jeg vil ogsaa selv omdoebe dem.

Men jeg syntes at det var paedagogisk at beholder navnene for at understrege den slaviske 1:1 mapning.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester