c#序列化與還原序列化

來源:互聯網
上載者:User

序列化與還原序列化的定義與用處在網上可以索一大堆 我在這就不多說廢話了 如下:
.NET提供了三種序列化方式1、XML Serializer 2、SOAP Serializer 3、BinarySerializer
本例用的是1、XML Serializer
問題:在資料庫記錄對某一產品的約束時,這個約束隨對產品的認識增強 對產品約束項也隨之增多 
      如果用欄欄位來記錄本產品的約束的話 需要不斷的對錶結構調整 這對整個開發造成很多麻煩
      我們把可以定義一個約束類 然後對此類序列化成一個XML 存入資料庫須要時可對他還原序列化
      約束項可以隨時增加(只能比之前項多 而不能少) 刪除項時會對已序列化的XML還原序列化時出錯
      這樣就能減少操作資料庫欄位時帶來的麻煩

定義約束類,Serializable 屬性對它進行標記--此類可以被序列化 如下所示:
[Serializable]
public class BatchConstraints
{
public DateTime From { get; set; }
[XmlIgnore]
public TimeSpan PeriodTime { get; set; }
public int BatchCount { get; set; }
[XmlElement("PeriodTime")]
public String Period
{
    get
    {
        return PeriodTime.ToString();
    }
    set
    {
        PeriodTime = TimeSpan.Parse(value);
    }
}
//可隨時增加所需約束
}
在序列化時,其結果如下所示:
<BatchConstraints xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<From>2009-04-14T00:00:00</From>
<BatchCount>1</BatchCount>
<PeriodTime>1.00:00:00</PeriodTime>
</BatchConstraints>

注意:1.TimeSpan 類型是不能被序列化的, 我們為public TimeSpan PeriodTime { get; set; }設定了XmlIgnore,
     在序列化時PeriodTime就不會被序列化,我們可以把TimeSpan轉化成string類型序列化存入資料庫,如:[XmlElement("PeriodTime")]
     public String Period
     2.約束項可以隨時增加(只能比之前項多 而不能少) 刪除項時會對已序列化的XML還原序列化時出錯
方法如下

代碼

//序列化
BatchConstraints mSchedule = new BatchConstraints();
mSchedule.From = RegisterDate;
mSchedule.Period = Period;
mSchedule.BatchCount = BatchCount;
XElement mBatchPublishSchedule = XMLHelp.XmlSerializer(mSchedule);
//還原序列化
BatchConstraints settingList = XMLHelp.XmlDeserialize<BatchConstraints>(XElement(資料庫取出的XML欄位));

/// <summary>
/// 序列化
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static XElement XmlSerializer<T>(T obj)
{
try
{
ser = new XmlSerializer(obj.GetType());
Stream stream = new MemoryStream();
ser.Serialize(stream, obj);
stream.Seek(0, SeekOrigin.Begin);
using (StreamReader reader = new StreamReader(stream))
{
_XElement = XElement.Load(reader);
}
stream.Close();
return _XElement;
}
catch
{
return null;
}
}
/// <summary>
/// 還原序列化
/// </summary>
public static T XmlDeserialize<T>(XElement xe)
{
try
{
ser = new XmlSerializer(typeof(T));
return (T)ser.Deserialize(xe.CreateReader());
}
catch
{
return default(T);
}
}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.