使用特定格式将对象序列化为XML

时间:2010-07-21 16:53:29

标签: c# xml serialization

我试图用特定的fomat序列化一个对象(在这种情况下是一个类)。 我有这样的事情:

<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>

我有一个包含每个元素的类,但是当我序列化它时,它将其转换为这种格式:

<?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>

所以任何人都可以帮助我吗? 我用来转换为xml的方法是:

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());
    }

请注意: 指定名称空间和类名我正在使用这个: [XmlRootAttribute(“ns:pay”,Namespace =“http://example.uri.here”)] 在课堂上

如果您没有注意到每个XML元素都以

谢谢你的帮助。

2 个答案:

答案 0 :(得分:4)

好的家伙我刚刚在这里找到了我的问题的答案,我写这里是为了帮助解决这个问题的人:

    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();
}

解决前缀: 我创建了一个XmlSerializerNamespaces对象,并添加了我想要的前缀和命名空间。

解决问题:支付ns:付款 我创建了两个类:付款和支付。

在薪酬课程中我添加了这个: [XmlRoot(“pay”,Namespace =“http://example.uri.here”)]

在付款类中,我添加了以下内容: [XmlRoot( “支付”)]

Pay Class有付款类型的财产。用这种风格创建xml:

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

谢谢你们。对不起,我询问并在询问后差不多30分钟找到了这个问题。

答案 1 :(得分:0)

还有LINQtoXSD(不是XmlSerializer,当然: - )