1

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.

1
  • Your target XML is invalid as it contains multiple root nodes, so the only way to get invalid XML is by hard-coding strings, no way with a decent XML serializer/parser. Commented Jul 21, 2010 at 16:56

2 Answers 2

4

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.

Sign up to request clarification or add additional context in comments.

Comments

0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.