【问题标题】:Inherit parent element name into child with C# XmlSerializer使用 C# XmlSerializer 将父元素名称继承给子元素
【发布时间】:2016-10-31 20:06:25
【问题描述】:

我有一个如下所示的课程:

public class CustomerType 
{
    public string Address {get; set;}
    public string City {get; set;}
}

还有一个像这样的类:

public class CustomerInfo
{
        public CustomerType Sender {get; set;}
        public CustomerType Reciever {get; set;}
}

如何配置 XmlSerializer 以获得以下 XML?

<CustomerInfo>
   <Sender>
       <SenderAddress></SenderAddress> 
       <SenderCity></SenderCity>
   </Sender> 
   <Receiver>
       <ReceiverAddress></ReceiverAddress> 
       <ReceiverCity></ReceiverCity>
   </Receiver> 
</CustomerInfo>

我正在使用的 API 需要这种格式,即 CustomerType 元素的名称在序列化时作为子元素名称的前缀。

【问题讨论】:

  • 我不认为你可以简单地做到这一点,也许创建2个不同的Address类更容易:一个带有Sender*字段,另一个带有Receiver*

标签: c# xml xml-serialization xmlserializer


【解决方案1】:

试试这个

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {

            CustomerInfo info = new CustomerInfo()
            {
                Sender = new CustomerSender()
                {
                    Address = "123",
                    City = "North Pole"
                },
                Reciever = new CustomerReceiver()
                {
                    Address = "456",
                    City = "South Pole"
                }
            };

            XmlSerializer serializer = new XmlSerializer(typeof(CustomerInfo));

            StreamWriter writer = new StreamWriter(FILENAME);
            serializer.Serialize(writer, info);
            writer.Flush();
            writer.Close();
            writer.Dispose();

        }
    }
    [XmlRoot("Sender")]
    public class CustomerSender
    {
        [XmlElement("SenderAddress")]
        public string Address { get; set; }

        [XmlElement("SenderCity")]
        public string City { get; set; }
    }
    [XmlRoot("Receiver")]
    public class CustomerReceiver
    {
        [XmlElement("ReceiverAddress")]
        public string Address { get; set; }

        [XmlElement("ReceiverCity")]
        public string City { get; set; }
    }
    public class CustomerInfo
    {
        [XmlElement("Sender")]
        public CustomerSender Sender { get; set; }

        [XmlElement("Receiver")]
        public CustomerReceiver Reciever { get; set; }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多