前端之家收集整理的这篇文章主要介绍了
XML反序列化实体类,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们的生活有太多无奈,我们无法改变,也无力去改变,更糟的是,我们失去了改变的想法。
实体类
BaseInfo.cs
public class BaseInfo
{
List<Person> perList = new List<Person>();
[XmlElement(ElementName = "Person")]
public List<Person> PerList
{
get { return perList; }
set { perList = value; }
}
}
Book.cs
public class Book
{
string isbn;
string title;
public Book() { }
public Book(string isbn,string title)
{
this.isbn = isbn;
this.title = title;
}
public string ISBN
{
get { return isbn; }
set { isbn = value; }
}
public string Title
{
get { return title; }
set { title = value; }
}
}
Books.cs
public class Books
{
List<Book> bookList = new List<Book>();
[XmlElement(ElementName = "Book")]
public List<Book> BookList
{
get { return bookList; }
set { bookList = value; }
}
}
Person.cs
public class Person
{
string name;
int age;
List<Books> bookList = new List<Books>();
public Person()
{ }
public Person(string name,int age)
{
this.name = name;
this.age = age;
}
public string Name
{
get { return name; }
set { name = value; }
}
public int Age
{
get { return age; }
set { age = value; }
}
[XmlElement(ElementName = "Books")]
public List<Books> BookList
{
get { return bookList; }
set { bookList = value; }
}
}
Game.cs和Order.cs
public class Game
{
[XmlElement("no")]
public string No { get; set; }
[XmlElement("pwd")]
public string Pwd { get; set; }
[XmlElement("extime")]
public string Extime { get; set; }
}
[XmlRoot("order")]
public class Order
{
[XmlElement("id")]
public string Id { get; set; }
[XmlElement("cid")]
public string Cid { get; set; }
[XmlElement("cnum")]
public string Cnum { get; set; }
[XmlElement("cash")]
public string Cash { get; set; }
[XmlElement("name")]
public string Name { get; set; }
[XmlArray("games")]
[XmlArrayItem("game")]
public List<Game> GameList { get; set; }
}
XmlUtils.cs
public class XmlUtil
{
#region 反序列化
public static object Deserialize(Type type,string xml)
{
try
{
using (var sr = new StringReader(xml))
{
var xmldes = new XmlSerializer(type);
return xmldes.Deserialize(sr);
}
}
catch (Exception e)
{
return null;
}
}
public static object Deserialize(Type type,Stream stream)
{
var xmldes = new XmlSerializer(type);
return xmldes.Deserialize(stream);
}
#endregion
#region 序列化XML文件
public static string Serializer(Type type,object obj)
{
var Stream = new MemoryStream();
var xml = new XmlSerializer(type);
try
{
xml.Serialize(Stream,obj);
}
catch (InvalidOperationException)
{
throw;
}
Stream.Position = 0;
var sr = new StreamReader(Stream);
string str = sr.ReadToEnd();
return str;
}
#endregion
#region 将XML转换为DATATABLE
public static DataTable XmlAnalysisArray()
{
try
{
string FileURL = ConfigurationManager.AppSettings["Client"];
var ds = new DataSet();
ds.ReadXml(FileURL);
return ds.Tables[0];
}
catch (Exception ex)
{
HttpContext.Current.Response.Write(ex.Message);
return null;
}
}
public static DataTable XmlAnalysisArray(string FileURL)
{
try
{
var ds = new DataSet();
ds.ReadXml(FileURL);
return ds.Tables[0];
}
catch (Exception ex)
{
HttpContext.Current.Response.Write(ex.Message);
return null;
}
}
#endregion
#region 获取对应XML节点的值
public static string XmlAnalysis(string stringRoot,string xml)
{
if (stringRoot.Equals("") == false)
{
try
{
var XmlLoad = new XmlDocument();
XmlLoad.LoadXml(xml);
return XmlLoad.DocumentElement.SelectSingleNode(stringRoot).InnerXml.Trim();
}
catch (Exception ex)
{
}
}
return "";
}
#endregion
}
Index.aspx内容:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="btnParse" runat="server" Text="XML反序列化一" onclick="btnParse_Click" />
<asp:Button ID="btnTwoParse" runat="server" Text="XML反序列化二" onclick="btnTwoParse_Click" />
</div>
</form>
</body>
</html>
Index.aspx.cs代码:
public partial class Index : System.Web.UI.Page
{
protected void Page_Load(object sender,EventArgs e)
{
}
protected void btnParse_Click(object sender,EventArgs e)
{
string xmlStr = @"<order>
<id>1990000000</id>
<cid>11111111</cid>
<cnum>2</cnum>
<cash>20</cash>
<name>生化危机</name>
<games>
<game>
<no>21000000</no>
<pwd>123456</pwd>
<extime>2020-01-23</extime>
</game>
<game>
<no>21000001</no>
<pwd>234567</pwd>
<extime>2020-01-23</extime>
</game>
</games>
</order> ";
Order order = (Order)XmlUtil.Deserialize(typeof(Order),xmlStr);
Response.Write("ID="+order.Id+"<br/>"+
"name="+order.Name+"<br/>"+
"game一的no="+order.GameList[0].No+"<br/>"+
"game一的pwd=" + order.GameList[0].Pwd + "<br/>" +
"game二的no=" + order.GameList[1].No + "<br/>" +
"game二的pwd=" + order.GameList[1].Pwd + "<br/>"
);
}
protected void btnTwoParse_Click(object sender,EventArgs e)
{
string xmlStr = @"<BaseInfo>
<Person>
<Name>小明</Name>
<Age>16</Age>
<Books>
<Book>
<ISBN>123</ISBN>
<Title>借的书1</Title>
</Book>
</Books>
</Person>
<Person>
<Name>小红</Name>
<Age>18</Age>
<Books>
<Book>
<ISBN>456</ISBN>
<Title>借的书2</Title>
</Book>
<Book>
<ISBN>789</ISBN>
<Title>借的书3</Title>
</Book>
</Books>
</Person>
</BaseInfo>";
XmlSerializer xmlSearializer = new XmlSerializer(typeof(BaseInfo));
StringReader sr = new StringReader(xmlStr);
BaseInfo info = (BaseInfo)xmlSearializer.Deserialize(sr);
foreach (Person per in info.PerList)
{
Response.Write("人员:");
Response.Write(" 姓名:" + per.Name+"<br />");
Response.Write(" 年龄:" + per.Age + "<br />");
foreach (Books b1 in per.BookList)
{
foreach (Book b in b1.BookList)
{
Response.Write(" 书:");
Response.Write(" ISBN:" + b.ISBN + "<br />");
Response.Write(" 书名:" + b.Title + "<br />");
}
}
Response.Write("<hr />");
}
}
}
运行结果如图: