程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#完成龐雜XML的序列化與反序列化

C#完成龐雜XML的序列化與反序列化

編輯:C#入門知識

C#完成龐雜XML的序列化與反序列化。本站提示廣大學習愛好者:(C#完成龐雜XML的序列化與反序列化)文章只能為提供參考,不一定能成為您想要的結果。以下是C#完成龐雜XML的序列化與反序列化正文


本文以一個實例的情勢講述了C#完成龐雜XML的序列化與反序列化的辦法。分享給年夜家供年夜家參考。詳細辦法以下:

已知.xml(再此定名default.xml)文件,請將其反序列化到一個實例對象。

Default.XML文件以下:

<?xml version="1.0" encoding="utf-8" ?>
<config>
 <rules>
  <rule name="namea">
   <params>
    <item name="p" type="get" pattern="(ios|android|)" />
    <item name="cid" type="get" pattern="(ios|android|)" />
    <item name="type" type="get" pattern="(ios|android|)" />
    <item name="sort" type="get" pattern="(ios|android|)" />
    <item name="action" type="post" pattern="(ios|android|)" />
    <item name="userAgent" type="header" pattern="(ios|android|)" />
   </params>
  </rule>
 
  <rule name="nameb">
   <params>
    <item name="p" type="get" pattern="(ios|android|)" />
    <item name="cid" type="get" pattern="(ios|android|)" />
    <item name="type" type="get" pattern="(ios|android|)" />
    <item name="sort" type="get" pattern="(ios|android|)" />
    <item name="action" type="post" pattern="(ios|android|)" />
    <item name="userAgent" type="header" pattern="(ios|android|)" />
   </params>
  </rule>
 
  <rule name="namec">
   <params>
    <item name="p" type="get" pattern="(ios|android|)" />
    <item name="cid" type="get" pattern="(ios|android|)" />
    <item name="type" type="get" pattern="(ios|android|)" />
    <item name="sort" type="get" pattern="(ios|android|)" />
    <item name="action" type="post" pattern="(ios|android|)" />
    <item name="userAgent" type="header" pattern="(ios|android|)" />
   </params>
  </rule>
 
  <rule name="named">
   <params>
    <item name="p" type="get" pattern="(ios|android|)" />
    <item name="cid" type="get" pattern="(ios|android|)" />
    <item name="type" type="get" pattern="(ios|android|)" />
    <item name="sort" type="get" pattern="(ios|android|)" />
    <item name="action" type="post" pattern="(ios|android|)" />
    <item name="userAgent" type="header" pattern="(ios|android|)" />
   </params>
  </rule>
 </rules>
</config>

C#示例代碼以下:

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

namespace 多層級反序列
{
  [XmlType(TypeName = "config")]
  public class XmlConfig
  {
    [XmlArray("rules")]
    public List<rule> rules { get; set; }
  }

  [XmlType(TypeName = "rule")]
  public class rule
  {
    [XmlAttribute]
    public string name { get; set; }

    [XmlArray("params")]
    public List<paramsItem> @params { get; set; }
  }

  [XmlType(TypeName = "item")]
  public class paramsItem
  {
    [XmlAttribute]
    public string name { get; set; }
    [XmlAttribute]
    public string type { get; set; }
    [XmlAttribute]
    public string pattern { get; set; }
  }

  class Program
  {
    static void Main(string[] args)
    {
      /*
      XmlConfig xml1 = DeserializeFromXml<XmlConfig>("default.xml");
      XmlConfig xml = new XmlConfig();
      SerializeToXml<XmlConfig>("default.xml", xml);
      */

      XmlConfig xml1 = DeserializeFromXml<XmlConfig>("default.xml");

    }

    /// <summary>
    /// XML序列化某一類型到指定的文件
    /// </summary>
    /// <param name="filePath"></param>
    /// <param name="obj"></param>
    /// <param name="type"></param>
    public static void SerializeToXml<T>(string filePath, T obj)
    {
      try
      {
        using (System.IO.StreamWriter writer = new System.IO.StreamWriter(filePath))
        {
          System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
          xs.Serialize(writer, obj);
        }
      }
      catch (Exception ex)
      {
      }
    }
    /// <summary>
    /// 從某一XML文件反序列化到某一類型
    /// </summary>
    /// <param name="filePath">待反序列化的XML文件稱號</param>
    /// <param name="type">反序列化出的</param>
    /// <returns></returns>
    public static T DeserializeFromXml<T>(string filePath)
    {
      try
      {
        if (!System.IO.File.Exists(filePath))
          throw new ArgumentNullException(filePath + " not Exists");

        using (System.IO.StreamReader reader = new System.IO.StreamReader(filePath))
        {
          System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
          T ret = (T)xs.Deserialize(reader);
          return ret;
        }
      }
      catch (Exception ex)
      {
        return default(T);
      }
    }
  }
}

願望本文所述對年夜家的C#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved