XML 序列化的一个应用

                
         在做一个CMS后台管理菜单时学到的
XML 序列化的一个应用,先建立一个XML文件,然后用DataSet读取之内容.
 1。XML 序列化    基础知识
      序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。在另一端,反序列化将从该流重新构造对象。

XML 序列化仅将对象的公共字段和属性值序列化为 XML 流。XML 序列化不包括类型信息。例如,如果您有一个存在于 Library 命名空间中的 Book 对象,将不能保证它将会被反序列化为同一类型的对象。

XML 序列化中最主要的类是 XmlSerializer 类,它的最重要的方法是 SerializeDeserialize 方法。

简单类的序列化
下面的示例显示一个具有公共字段的简单类:
public class OrderForm{
    public DateTime OrderDate;
}
当将此类的实例序列化时,该实例可能类似于下面的代码:
<OrderForm>
    <OrderDate>12/12/01</OrderDate>
</OrderForm>

使用 XmLSerializer 类,可将下列项序列化。

  • 公共类的公共读/写属性和字段
  • 实现 ICollectionIEnumerable 的类。(注意只有集合会被序列化,而公共属性却不会。)
  • XmlElement 对象。
  • XmlNode 对象。
  • DataSet 对象。

序列化对象
若要序列化对象,首先创建要序列化的对象并设置它的公共属性和字段。为此,必须确定要用以存储 XML 流的传输格式(或者作为流,或者作为文件)。例如,如果 XML 流必须以永久形式保存,则创建 FileStream 对象。当您反序列化对象时,传输格式确定您将创建流还是文件对象。确定了传输格式之后,就可以根据需要调用 Serialize 或 Deserialize 方法。
序列化对象
创建对象并设置它的公共字段和属性。
使用该对象的类型构造 XmlSerializer。有关更多信息,请参见 XmlSerializer 类构造函数。
调用 Serialize 方法以生成对象的公共属性和字段的 XML 流表示形式或文件表示形式。下面的示例创建一个文件。
MySerializableClass myObject = new MySerializableClass();
// Insert code to set properties and fields of the object.
XmlSerializer mySerializer = new
XmlSerializer(typeof(MySerializableClass));
// To write to a file, create a StreamWriter object.
StreamWriter myWriter = new StreamWriter("myFileName.xml");
mySerializer.Serialize(myWriter, myObject);

反序列化对象
使用要反序列化的对象的类型构造 XmlSerializer。
调用 Deserialize 方法以产生该对象的副本。在反序列化时,必须将返回的对象强制转换为原始对象的类型,如下面的示例中所示。下面的示例将该对象反序列化为文件,尽管它也可以被反序列化为流。
MySerializableClass myObject;
// Constructs an instance of the XmlSerializer with the type
// of object that is being deserialized.
XmlSerializer mySerializer =
new XmlSerializer(typeof(MySerializableClass));
// To read the file, creates a FileStream.
FileStream myFileStream =
new FileStream("myFileName.xml", FileMode.Open);
// Calls the Deserialize method and casts to the object type.
myObject = (MySerializableClass) //注意,没有分号!

2.如何在做CMS后台管理菜单时应用

    先建立一个XML文件

   <?xml version="1.0"?>

<Items>

  <Item>

    <ID>User</ID>

   <Text>用户管理</Text>

<Link>UserList.aspx</Link>

</Item>

<Item>

<ID>Column</ID>

<Text>新闻管理</Text>

<Link>ColumnList.aspx</Linkk>

</Item>

.......................................

</Items>

然后添加一个Menu的Web窗体,添加一个Repeater控件,其html代码:

<asp:repeater id="Repeater1" runat="Server" >

<ItemTemplate>

<%#DataBinder.Eval(Container.DataItem,"LeadTag")%><A runat="server"><%#DataBinder.Eval(Container.DataItem,"Link")%>

<asp:Label id="itemLabel" runat="server">

<%#DataBinder.Eval(Container.DataItem,"Text")%>

</asp:Label>

</A>

</ItemTemplate>

                 Menu.aspx.cs代码为:

   public class Menu

{protected System.Web.UI.WebControls.Repeater Repeater1;

private string currColumn;//当前栏目名称

private string xmlsrc;//xml文件的存储目录

public string Src    {set{xmlsrc=value;}}

public string Column{set{currColumn=value;}}

if(xmlsrc!=null){

DataSet ds=new DataSet();

ds.ReadXml(Server.MapPath(xmlsrc));

DataColumn dc;

dc=new DataColumn("isCurrItem",Type,GetTypes(System.Boolean"));

dt.Column.Add(dc);

DataRow dr;

for(int i=0;i<dt.Rows.Count;i++)

{dr=dt.Rows[i];

 dr["isCurrItem"]=(dr["ID"].ToString()++currColumn);

if(Boolean)(dr["Text"].ToString()[0]=='-'))

{dr["Text"]=dr["Text"].ToString().Remove(0,1);}
}

Repeater.DataSource=ds;

Repeater.DataBind();

  }

private void Repeater_ItemDateBound(object sender,System.Web.UI.WebControls.RepeaterItemEventArgs e)

{DataRowView currDataItem=(DataRowView)e.Item.DataItem;

Label currLabel1=(Label)e.Item.FindControl("itemLabel");

if((Boolean)currDataItem["isCurrItem"])

{currLabel.CssClass="Yellowcontent";}//一个样式


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值