GutierrezDev
GutierrezDev

Reputation: 1076

Serialize Object to XML in with specific format

Im trying to Serialize an object( a class in this case) with an specific fomat. I got something like this:

<ns:pay xmlns:ns="http://example.uri.here">
<ns:Payment>
    <ns:customerKeyValue>5555</ns:customerKeyValue>
    <ns:bankCode>BBBB</ns:bankCode>
    <ns:paymentAmount>456</ns:paymentAmount>
    <ns:paymentCategory>KD</ns:paymentCategory>
    <ns:paymentMode>AC</ns:paymentMode>
    <ns:referenceNumber>123A</ns:referenceNumber>
    <ns:userID>Test2</ns:userID>
    <ns:invoiceNumber>61</ns:invoiceNumber>
</ns:Payment>
</ns:pay>

I have the class that have each element but when i serialize it it convert its to this format:

<?xml version="1.0"?>
<ns_x003A_pay xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://example.uri.here">
  <CustomerKeyValue>5555</CustomerKeyValue>
  <BankCode>BBBB</BankCode>
  <PaymentAmount>456</PaymentAmount>
  <PaymentCategory>KD</PaymentCategory>
  <PaymentMode>AC</PaymentMode>
  <ReferenceNumber>123A</ReferenceNumber>
  <UserID>Test2</UserID>
  <InvoiceNumber>61</InvoiceNumber>
</ns_x003A_pay>

So anyone can help me with that? The method that im using to convert to xml is this:

public static string SerializeToXMLString(object ObjectToSerialize)
    {
        MemoryStream mem = new MemoryStream();
        System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(ObjectToSerialize.GetType());
        ser.Serialize(mem, ObjectToSerialize);
        ASCIIEncoding ascii = new ASCIIEncoding();
        return ascii.GetString(mem.ToArray());
    }

note: to specify the namespace and class name i'm using this: [XmlRootAttribute( "ns:pay", Namespace = "http://example.uri.here")] in the class

If you haven't noted every XML element start with

Thanks for you help.

Upvotes: 1

Views: 4597

Answers (2)

GutierrezDev
GutierrezDev

Reputation: 1076

Ok guys I just found the answer here to my questions and i'm writing here to help people with this problem:

    public static string SerializeToXMLString(object ObjectToSerialize)
        {
            //
            XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
            ns.Add("ns", "http://example.uri.here");
            //
            //
            XmlSerializer serializer = new XmlSerializer(ObjectToSerialize.GetType());
            XmlWriterSettings writerSettings = new XmlWriterSettings();
            writerSettings.OmitXmlDeclaration = true;
            StringWriter stringWriter = new StringWriter();
            using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter, writerSettings))
            {
                serializer.Serialize(xmlWriter, ObjectToSerialize,ns);
            }
            return  stringWriter.ToString();
}

To solve the prefix : I created a XmlSerializerNamespaces object and added the prefix that I wanted and the namespace.

To solve the ns:pay ns:payment I created two classes: Payment and Pay.

In the pay class i added this: [XmlRoot("pay", Namespace = "http://example.uri.here")]

In the Payment Class i added this: [XmlRoot("pay")]

Pay Class has a property of type payment. That create the xml in this style:

<ns:pay>
<ns:payment
element here
</ns:payemnt>
</ns:pay>

Thank you guys. Sorry that I ask and found the question almost 30 minutes after asking.

Upvotes: 4

user166390
user166390

Reputation:

There is also LINQtoXSD (not XmlSerializer, sure :-)

Upvotes: 0

Related Questions