欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

.net精簡(jiǎn)框架集多個(gè)類(lèi)同時(shí)串行化(XML方式)技術(shù)

系統(tǒng) 1910 0

存取類(lèi)實(shí)例的參數(shù)最佳的方法當(dāng)然是串行化技術(shù),串行化支持兩種方式:二進(jìn)制方式,可以高保真的保存類(lèi)示例,另一種是XML方式,它僅保存公共數(shù)據(jù)。很可惜.net 2.0的精簡(jiǎn)框架集僅支持XML方式。

我這里做了一個(gè)示例,實(shí)現(xiàn)的功能是在PC機(jī)上可以畫(huà)很多圖形,用串行化方式保存相關(guān)信息,把相關(guān)信息下載到wince中,由wince中的c#程序讀取串行化信息,并把相關(guān)類(lèi)的實(shí)例信息還原出來(lái)。

這里面有個(gè)關(guān)鍵,圖形類(lèi)有可能有多個(gè)(示例為2個(gè)),而目前我查相關(guān)資料,都是一個(gè)類(lèi)的串行化存取,并且如果你存兩個(gè)以上的類(lèi),用XML是可以存取成功的,但是讀取的時(shí)候它會(huì)告訴你失敗。所以這里引入了ArrayList類(lèi)的相關(guān)概念。

也就是說(shuō),我定義了一個(gè)類(lèi),類(lèi)中的一個(gè)屬性為ArrayList類(lèi)的實(shí)例,這樣用ArrayList實(shí)例我可以存儲(chǔ)很多的類(lèi)信息。

同樣,不作任何處理用一般方法存儲(chǔ)是成功的,但是在讀取時(shí),你發(fā)現(xiàn)ArrayList實(shí)例中的數(shù)據(jù),都是object類(lèi)型,原類(lèi)型信息丟失!

這怎么辦?繼續(xù)查資料,發(fā)現(xiàn)有兩種方法可以解決這個(gè)問(wèn)題。

1、 [XmlElement(Type = typeof(YFRect)), XmlElement(Type = typeof(YFCircle))]
public ArrayList gData = new ArrayList(); //圖元數(shù)據(jù)

在類(lèi)中添加X(jué)mlElement聲明,把ArrayList 類(lèi)實(shí)例中有可能添加的類(lèi)都標(biāo)示出。

2、在存取數(shù)據(jù)時(shí),用代碼告訴XML串行化相關(guān)類(lèi)的類(lèi)型

Type[] gt = new Type[2]; //圖元類(lèi)型數(shù)組
gt[0] = typeof(YFRect);
gt[1] = typeof(YFCircle);

Stream sf = new FileStream(strXmlFile, FileMode.Open, FileAccess.Read, FileShare.None);
XmlSerializer xmls = new XmlSerializer(typeof(YFGraphicsData), gt);
XmlData = (YFGraphicsData)xmls.Deserialize(sf);
sf.Close();

這是運(yùn)行后的結(jié)果:

.net精簡(jiǎn)框架集多個(gè)類(lèi)同時(shí)串行化(XML方式)技術(shù)

相關(guān)代碼:clsGraphics.cs (圖元類(lèi))

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

namespace YFXMLSaveLoad
{
//圖元數(shù)據(jù)類(lèi)
public class YFGraphicsData
{
//[XmlElement(Type = typeof(YFRect)), XmlElement(Type = typeof(YFCircle))]
//當(dāng)代碼傳入類(lèi)型數(shù)組時(shí),則不需要上面的聲明
public string strName = "測(cè)試";
public string strVer = "V1.0.0";
public ArrayList gData = new ArrayList(); //圖元數(shù)據(jù)

}

//串行化操作類(lèi)
public class YFXMLSerialize
{
//串行化
public void XMLSerializer(YFGraphicsData XmlData,string strXmlFile)
{
Type[] gt = new Type[2]; //圖元類(lèi)型數(shù)組
gt[0] = typeof(YFRect);
gt[1] = typeof(YFCircle);

Stream sf = new FileStream(strXmlFile, FileMode.Create, FileAccess.Write, FileShare.None);
XmlSerializer xmls = new XmlSerializer(typeof(YFGraphicsData), gt);
xmls.Serialize(sf, XmlData);
sf.Close();
}

//反串行化
public void XMLDeserialize(out YFGraphicsData XmlData, string strXmlFile)
{
Type[] gt = new Type[2]; //圖元類(lèi)型數(shù)組
gt[0] = typeof(YFRect);
gt[1] = typeof(YFCircle);

Stream sf = new FileStream(strXmlFile, FileMode.Open, FileAccess.Read, FileShare.None);
XmlSerializer xmls = new XmlSerializer(typeof(YFGraphicsData), gt);
XmlData = (YFGraphicsData)xmls.Deserialize(sf);
sf.Close();
}

}

//------------------------------------------------
public class YFGraphicsBase
{
public int width = 1;
//Color類(lèi)不支持XML串行化
public int color = 0;
public virtual void Draw(Graphics e) { }
}

public class YFRect : YFGraphicsBase
{
public Rectangle xy;
public override void Draw(Graphics e)
{
e.DrawRectangle(new Pen(Color.FromArgb(color), width), xy);
}
}

public class YFCircle : YFGraphicsBase
{
public Rectangle xy;
public override void Draw(Graphics e)
{
e.DrawEllipse(new Pen(Color.FromArgb(color), width), xy);
}
}

}

Form1.cs 窗體代碼

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Xml.Serialization;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;

namespace YFXMLSaveLoad
{
public partial class Form1 : Form
{

YFGraphicsData XmlData = new YFGraphicsData(); //圖元數(shù)據(jù)
YFXMLSerialize XmlWork = new YFXMLSerialize(); //XML串行化方法

public Form1()
{
InitializeComponent();
panel1.Refresh();
}

//自繪
private void button4_Click(object sender, EventArgs e)
{
YFRect yfr001=new YFRect();
YFRect yfr002 = new YFRect();
YFCircle yfc001 = new YFCircle();

yfr001.color = Color.Blue.ToArgb();
yfr001.xy.X = 10;
yfr001.xy.Y = 10;
yfr001.xy.Width = 50;
yfr001.xy.Height = 50;

yfr002.color = Color.FromArgb(0, 0, 0).ToArgb();
yfr002.width = 2;
yfr002.xy.X = 30;
yfr002.xy.Y = 50;
yfr002.xy.Width = 100;
yfr002.xy.Height = 80;

yfc001.color = Color.Red.ToArgb();
yfc001.xy.X = 20;
yfc001.xy.Y = 20;
yfc001.xy.Width = 80;
yfc001.xy.Height = 90;

XmlData.gData.Clear();
XmlData.gData.Add(yfr001);
XmlData.gData.Add(yfc001);
XmlData.gData.Add(yfr002);

panel1.Refresh();

}

//繪圖
private void panel1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.Clear(Color.PapayaWhip);
foreach (YFGraphicsBase dw in XmlData.gData)
{
dw.Draw(e.Graphics);
}
textBox1.Text = XmlData.gData.Count.ToString();
}

//清圖元
private void button3_Click(object sender, EventArgs e)
{
XmlData.gData.Clear();
panel1.Refresh();
}

//保存圖元
private void button2_Click(object sender, EventArgs e)
{
//圖元串行化
XmlWork.XMLSerializer(XmlData,"TuData.xml");
//------
MessageBox.Show("OK");
}

//調(diào)入圖元
private void button1_Click(object sender, EventArgs e)
{
//圖元反串行化
XmlWork.XMLDeserialize(out XmlData, "TuData.xml");
//------
panel1.Refresh();
}

}
}

//-----------------------------------

.net精簡(jiǎn)框架集多個(gè)類(lèi)同時(shí)串行化(XML方式)技術(shù)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲精品一区二区深夜福利 | 在线观看免费视频日韩 | 日本欧美不卡一区二区三区在线 | 国产91久久最新观看地址 | 小蝌蚪污视频 | 成人亚洲区无码偷拍 | 国产成人啪精品视频免费网站软件 | 久久91久久91精品免费观看 | 九色 在线 | 亚洲午夜成激人情在线影院 | 国产在视频一区二区三区吞精 | 色网站在线免费观看 | 午夜a狂野欧美一区二区 | 一级特黄特黄毛片欧美的 | a在线观看欧美在线观看 | 91九色精品国产 | 日本在线视频一区二区 | 日本一区二区三区四区高清视频 | 青青久草| 午夜精品视频在线看 | 午夜激情视频在线 | 欧美 日韩 | 一级做a爱片久久 | 国产1区2区3区 | 日本天堂免费a | 三区在线视频 | 亚洲欧美日韩中文字幕在线不卡 | 久久久久无码国产精品一区 | 欧美亚洲激情视频 | 中文字幕视频在线 | 日韩av影院在线观看 | 欧洲中文字幕 | 亚洲视频在线观看一区 | 草草网站 | 日韩精品www| 精品国产乱码一区二区三 | 久久夜色精品国产亚洲噜噜 | 日本一道一区二区免费看 | 精品一区久久 | 国产91成人精品亚洲精品 | 国产福利资源在线 |