ASP.Net/XML/XML serialization — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
|
(нет различий)
|
Текущая версия на 11:51, 26 мая 2010
XML serialization (C#)
<%@ Import Namespace="System.Runtime.Serialization" %>
<%@ Import Namespace="System.Xml.Serialization" %>
<%@ Import Namespace="System.Data" %>
<%@ Page language="c#" %>
<script language="C#" runat="server">
private catalog Catalog;
private string xmlPath;
private void Page_Load(object sender, System.EventArgs e) {
xmlPath = Server.MapPath("cdcatalog.xml");
if(Catalog==null) {
Catalog = LoadData(xmlPath);
foreach(catalogCD cd in Catalog.Items) {
titleDropDownList.Items.Add(new System.Web.UI.WebControls.ListItem(cd.title));
}
}
}
private catalog LoadData(string path) {
try {
System.IO.FileStream fs = System.IO.File.OpenRead(path);
byte[] buff = new byte[fs.Length];
fs.Read(buff, 0, (int)fs.Length);
fs.Close();
Catalog = (catalog)Serialization.DeSerializeXML(System.Text.ASCIIEncoding.ASCII.GetString(buff), typeof(catalog));
return Catalog;
} catch(Exception) {
return null;
}
}
private void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e) {
string findvalue = titleDropDownList.SelectedItem.Text;
foreach(catalogCD cd in Catalog.Items) {
if(cd.title==findvalue) {
artistTextBox.Text=cd.artist;
countryTextBox.Text=cd.country;
companyTextBox.Text=cd.rupany;
priceTextBox.Text=cd.price;
yearTextBox.Text=cd.year;
break;
}
}
}
private void SaveButton_Click(object sender, System.EventArgs e) {
string findvalue = titleDropDownList.SelectedItem.Text;
catalogCD foundcd=null;
foreach(catalogCD cd in Catalog.Items) {
if(cd.title==findvalue) {
foundcd=cd;
break;
}
}
if(foundcd!=null) {
foundcd.artist=artistTextBox.Text;
foundcd.country=countryTextBox.Text;
foundcd.rupany=companyTextBox.Text;
foundcd.price=priceTextBox.Text;
foundcd.year=yearTextBox.Text;
System.IO.MemoryStream data = Serialization.SerializeXML(Catalog, typeof(catalog));
byte[] databytes = data.ToArray();
if(System.IO.File.Exists(xmlPath)) System.IO.File.Delete(xmlPath);
System.IO.FileStream f = System.IO.File.OpenWrite(xmlPath);
f.Write(databytes, 0, databytes.Length);
f.Close();
}
}
[System.Xml.Serialization.XmlRootAttribute("catalog", Namespace="", IsNullable=false)]
public class catalog {
[System.Xml.Serialization.XmlElementAttribute("cd")]
public catalogCD[] Items;
}
public class catalogCD {
public string title;
public string artist;
public string country;
public string company;
public string price;
public string year;
}
public class Serialization {
public static System.IO.MemoryStream SerializeXML(object request, System.Type type) {
try {
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(type);
System.IO.MemoryStream stm = new System.IO.MemoryStream();
serializer.Serialize(stm, request);
return stm;
} catch(Exception e){
return null;
}
}
public static object DeSerializeXML(string envelope, System.Type type) {
try {
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(type);
System.IO.MemoryStream stm = new System.IO.MemoryStream(System.Text.Encoding.ASCII.GetBytes(envelope));
object ud = serializer.Deserialize(stm);
stm.Close();
return ud;
} catch(Exception e){
return null;
}
}
}
</script>
<HTML>
<HEAD>
<title>Creating a Class from an XML Document</title>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<P>
<asp:Label id="titleLabel" runat="server">Title:</asp:Label>
<asp:DropDownList id="titleDropDownList" runat="server" Width="239px" AutoPostBack="True"
OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"></asp:DropDownList></P>
<P>
<asp:Label id="artistLabel" runat="server">Artist:</asp:Label>
<asp:TextBox id="artistTextBox" runat="server"></asp:TextBox></P>
<P>
<asp:Label id="countryLabel" runat="server">Country:</asp:Label>
<asp:TextBox id="countryTextBox" runat="server"></asp:TextBox></P>
<P>
<asp:Label id="companyLabel" runat="server">Company:</asp:Label>
<asp:TextBox id="companyTextBox" runat="server"></asp:TextBox></P>
<P>
<asp:Label id="priceLabel" runat="server">Price:</asp:Label>
<asp:TextBox id="priceTextBox" runat="server"></asp:TextBox></P>
<P>
<asp:Label id="yearLabel" runat="server">Year:</asp:Label>
<asp:TextBox id="yearTextBox" runat="server"></asp:TextBox></P>
<P>
<asp:Button id="SaveButton" runat="server" Text="Save Changes" OnClick="SaveButton_Click"></asp:Button></P>
</form>
</body>
</HTML>
XML serialization (VB)
<%@ Page language="vb" %>
<%@ Import Namespace="System.Data" %>
<script language="vb" runat="server">
Dim xmlPath As String
Dim cat As catalog
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
xmlPath = Server.MapPath("cdcatalog.xml")
If cat Is Nothing Then
cat = LoadData(xmlPath)
Dim cd As catalogCD
For Each cd In cat.Items
titleDropDownList.Items.Add(New System.Web.UI.WebControls.ListItem(cd.title))
Next cd
End If
End Sub
Private Function LoadData(ByVal path As String) As catalog
Try
Dim fs As System.IO.FileStream = System.IO.File.OpenRead(path)
Dim buff(fs.Length) As Byte
fs.Read(buff, 0, CInt(fs.Length))
fs.Close()
cat = CType(Serialization.DeSerializeXML(System.Text.ASCIIEncoding.ASCII.GetString(buff), GetType(catalog)), catalog)
Return cat
Catch
End Try
End Function "LoadData
Private Sub titleDropDownList_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim findvalue As String = titleDropDownList.SelectedItem.Text
Dim cd As catalogCD
For Each cd In cat.Items
If cd.title = findvalue Then
artistTextBox.Text = cd.artist
countryTextBox.Text = cd.country
companyTextBox.Text = cd.rupany
priceTextBox.Text = cd.price
yearTextBox.Text = cd.year
Exit For
End If
Next cd
End Sub
Private Sub SaveButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim findvalue As String = titleDropDownList.SelectedItem.Text
Dim foundcd As catalogCD = Nothing
Dim cd As catalogCD
For Each cd In cat.Items
If cd.title = findvalue Then
foundcd = cd
Exit For
End If
Next cd
If Not (foundcd Is Nothing) Then
foundcd.artist = artistTextBox.Text
foundcd.country = countryTextBox.Text
foundcd.rupany = companyTextBox.Text
foundcd.price = priceTextBox.Text
foundcd.year = yearTextBox.Text
Dim data As System.IO.MemoryStream = Serialization.SerializeXML(cat, GetType(catalog))
Dim databytes As Byte() = data.ToArray()
If System.IO.File.Exists(xmlPath) Then
System.IO.File.Delete(xmlPath)
End If
Dim f As System.IO.FileStream = System.IO.File.OpenWrite(xmlPath)
f.Write(databytes, 0, databytes.Length)
f.Close()
End If
End Sub
Public Class Serialization
Public Shared Function SerializeXML(ByVal request As Object, ByVal type As System.Type) As System.IO.MemoryStream
Try
Dim serializer As New System.Xml.Serialization.XmlSerializer(type)
Dim stm As New System.IO.MemoryStream()
serializer.Serialize(stm, request)
Return stm
Catch e As Exception
Return Nothing
End Try
End Function "SerializeXML
Public Shared Function DeSerializeXML(ByVal envelope As String, ByVal type As System.Type) As Object
Try
Dim serializer As New System.Xml.Serialization.XmlSerializer(type)
Dim stm As New System.IO.MemoryStream(System.Text.Encoding.ASCII.GetBytes(envelope))
Dim ud As Object = serializer.Deserialize(stm)
stm.Close()
Return ud
Catch e As Exception
Return Nothing
End Try
End Function "DeSerializeXML
End Class "Serialization
<System.Xml.Serialization.XmlRootAttribute("catalog", [Namespace]:="", IsNullable:=False)> _
Public Class catalog
<System.Xml.Serialization.XmlElementAttribute("cd")> _
Public Items() As catalogCD
End Class
Public Class catalogCD
Public title As String
Public artist As String
Public country As String
Public company As String
Public price As String
Public year As String
End Class
</script>
<HTML>
<HEAD>
<title>Creating a Class from an XML Document</title>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<P>
<asp:Label id="titleLabel" runat="server">Title:</asp:Label>
<asp:DropDownList id="titleDropDownList" runat="server" Width="239px" AutoPostBack="True"
OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"></asp:DropDownList></P>
<P>
<asp:Label id="artistLabel" runat="server">Artist:</asp:Label>
<asp:TextBox id="artistTextBox" runat="server"></asp:TextBox></P>
<P>
<asp:Label id="countryLabel" runat="server">Country:</asp:Label>
<asp:TextBox id="countryTextBox" runat="server"></asp:TextBox></P>
<P>
<asp:Label id="companyLabel" runat="server">Company:</asp:Label>
<asp:TextBox id="companyTextBox" runat="server"></asp:TextBox></P>
<P>
<asp:Label id="priceLabel" runat="server">Price:</asp:Label>
<asp:TextBox id="priceTextBox" runat="server"></asp:TextBox></P>
<P>
<asp:Label id="yearLabel" runat="server">Year:</asp:Label>
<asp:TextBox id="yearTextBox" runat="server"></asp:TextBox></P>
<P>
<asp:Button id="SaveButton" runat="server" Text="Save Changes" OnClick="SaveButton_Click"></asp:Button></P>
</form>
</body>
</HTML>