C#泛型对象快速组织成Xml数据帮助方法


由于工作需要需要将多个对象快速的组织到Xml文档中作为Xml文档数据节点,最先想到的是直接将泛型对象序列化后写入Xml文件中,但一秒钟后就自己否决了该方式,主要原因是序列化后节点的个性化程度不够高也不够灵活。

先上一段泛型对象序列化方法代码:

/// <summary>
    /// Xml序列化帮助类
    /// </summary>
    public class XmlSerializerHelper
    {
        public static void SaveToXml<T>(string path, T o, Type type) where T : class
        {
            if ((!string.IsNullOrEmpty(path)) && (null != type))
            {
                type = type != null ? type : o.GetType();
                using (StreamWriter writer = new StreamWriter(path))
                {
                    System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(type);
                    XmlSerializerNamespaces nameSpace = new XmlSerializerNamespaces();
                    nameSpace.Add("", "");
                    serializer.Serialize(writer, o, nameSpace);
                }
            }
        }        
    }

测试一下序列化代码:

MessageInfo message = new MessageInfo()
{
    MessageID = "1234567890",
    MessageType = "SystemMessage",
    MessageTitle = "MessageTitle",
    MessageContent = "MessageContent",
    SendTo = "Someone",
    SendFrom = "WUWEI",
    SendTime = DateTime.Now.ToString("yyyyMMddHHmmss")
};
XmlSerializerHelper.SaveToXml<MessageInfo>("../message.xml",message,message.GetType());

生成的Xml内容如下:

<?xml version="1.0" encoding="utf-8"?>
<MessageInfo>
  <MessageID>1234567890</MessageID>
  <MessageType>SystemMessage</MessageType>
  <MessageTitle>MessageTitle</MessageTitle>
  <MessageContent>MessageContent</MessageContent>
  <SendTo>Someone</SendTo>
  <SendFrom>WUWEI</SendFrom>
  <SendTime>20170926103626</SendTime>
</MessageInfo>

优化后的生成方式帮助类如下:

    public class XmlGenerateHelper
    {
        public static void MessageXmlGenerate(string path, string filename, Head head, List<MessageInfo> list)
        {
            XmlDocument doc = new XmlDocument();
            XmlElement rootElement = doc.CreateElement("", "MSG", "");
            doc.AppendChild(rootElement);

            XmlNode rootNode = doc.SelectSingleNode("MSG");
            XmlElement headNode = doc.CreateElement("Head");
            rootNode.AppendChild(headNode);
            foreach (PropertyInfo info in head.GetType().GetProperties())
            {
                XmlElement element = doc.CreateElement(info.Name);
                element.InnerText = info.GetValue(head).ToString();
                headNode.AppendChild(element);
            }

            XmlElement bodyNode = doc.CreateElement("Body");
            rootNode.AppendChild(bodyNode);
            foreach (MessageInfo obj in list)
            {
                XmlElement itemNode = doc.CreateElement("Item");
                bodyNode.AppendChild(itemNode);
                XmlElement informationNode = doc.CreateElement("Information");
                itemNode.AppendChild(informationNode);
                foreach (PropertyInfo info in obj.GetType().GetProperties())
                {
                    XmlElement element = doc.CreateElement(info.Name);
                    element.InnerText = info.GetValue(obj).ToString();
                    informationNode.AppendChild(element);
                }
            }
            doc.Save(string.Format("{0}{1}", path, filename));
        }
    }

测试优化后的帮助方法:

Head head = new Head()
{
     MessageSendDateTime = DateTime.Now.ToString("yyyyMMddHHmmss"),
     MessageSequence = "007",
     MessageType = "SystemMessage",
     SourceSystemID = "WEI",
     DestinationSystemID = "XXXXX"
};
List<MessageInfo> list = new List<MessageInfo>();
for (int i = 0; i < 6; i++)
{
     MessageInfo message = new MessageInfo()
     {
        MessageID = string.Format("123456789{0}",i),
        MessageType = "SystemMessage",
        MessageTitle = "MessageTitle",
        MessageContent = "MessageContent",
        SendTo = "Someone",
        SendFrom = "WUWEI",
        SendTime = DateTime.Now.ToString("yyyyMMddHHmmss")
      };
}
XmlGenerateHelper.MessageXmlGenerate("../", "list.xml", head, list);
测试结果如下:

<MSG>
  <Head>
    <MessageSendDateTime>20170926105503</MessageSendDateTime>
    <MessageSequence>007</MessageSequence>
    <MessageType>SystemMessage</MessageType>
    <SourceSystemID>WEI</SourceSystemID>
    <DestinationSystemID>XXXXX</DestinationSystemID>
  </Head>
  <Body>
    <Item>
      <Information>
        <MessageID>1234567890</MessageID>
        <MessageType>SystemMessage</MessageType>
        <MessageTitle>MessageTitle</MessageTitle>
        <MessageContent>MessageContent</MessageContent>
        <SendTo>Someone</SendTo>
        <SendFrom>WUWEI</SendFrom>
        <SendTime>20170926105503</SendTime>
      </Information>
    </Item>
    <Item>
      <Information>
        <MessageID>1234567891</MessageID>
        <MessageType>SystemMessage</MessageType>
        <MessageTitle>MessageTitle</MessageTitle>
        <MessageContent>MessageContent</MessageContent>
        <SendTo>Someone</SendTo>
        <SendFrom>WUWEI</SendFrom>
        <SendTime>20170926105503</SendTime>
      </Information>
    </Item>
    <Item>
      <Information>
        <MessageID>1234567892</MessageID>
        <MessageType>SystemMessage</MessageType>
        <MessageTitle>MessageTitle</MessageTitle>
        <MessageContent>MessageContent</MessageContent>
        <SendTo>Someone</SendTo>
        <SendFrom>WUWEI</SendFrom>
        <SendTime>20170926105503</SendTime>
      </Information>
    </Item>
    <Item>
      <Information>
        <MessageID>1234567893</MessageID>
        <MessageType>SystemMessage</MessageType>
        <MessageTitle>MessageTitle</MessageTitle>
        <MessageContent>MessageContent</MessageContent>
        <SendTo>Someone</SendTo>
        <SendFrom>WUWEI</SendFrom>
        <SendTime>20170926105503</SendTime>
      </Information>
    </Item>
    <Item>
      <Information>
        <MessageID>1234567894</MessageID>
        <MessageType>SystemMessage</MessageType>
        <MessageTitle>MessageTitle</MessageTitle>
        <MessageContent>MessageContent</MessageContent>
        <SendTo>Someone</SendTo>
        <SendFrom>WUWEI</SendFrom>
        <SendTime>20170926105503</SendTime>
      </Information>
    </Item>
    <Item>
      <Information>
        <MessageID>1234567895</MessageID>
        <MessageType>SystemMessage</MessageType>
        <MessageTitle>MessageTitle</MessageTitle>
        <MessageContent>MessageContent</MessageContent>
        <SendTo>Someone</SendTo>
        <SendFrom>WUWEI</SendFrom>
        <SendTime>20170926105503</SendTime>
      </Information>
    </Item>
  </Body>
</MSG>





  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值