Convert XML data to object and back using serialization
2010-01-29 22:44
525 查看
Introduction
Saving XML to a class object gives greater flexibility and maintainability. Moreover, it�s the preferred way of returning data from web services as compared to usingDataSets. Saving XML to a class object is called serialization and reading back using the reverse process is named as deserialization.
Process\sample
Let's take an example of an XSD named Emp.XSD:Collapse
Copy Code
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="Emp"> <xs:complexType> <xs:sequence> <xs:element name="EmpInfo" type="EmpInfo"/> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="EmpInfo"> <xs:sequence> <xs:element name="Code" type="requiredString"/> <xs:element name="FirstName" type="requiredString"/> <xs:element name="LastName" type="requiredString"/> <xs:element name="Destination" type="requiredString"/> </xs:sequence> </xs:complexType> <xs:simpleType name="requiredString"> <xs:annotation> <xs:documentation>template for required strings</xs:documentation> </xs:annotation> <xs:restriction base="xs:string"> <xs:minLength value="1"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="optionalString"> <xs:annotation> <xs:documentation>template for optional strings</xs:documentation> </xs:annotation> <xs:restriction base="xs:string"> <xs:minLength value="0"/> </xs:restriction> </xs:simpleType> </xs:schema>
Now, to convert a class from XSD, we would run the following command:
Collapse
Copy Code
xsd C:\Emp.xsd /t:lib /l:cs /c
from the Visual Studio .NET 2003 command prompt. This would create a class file named
Emp.
EMP Class
Collapse
Copy Code
//------------------------------------------------------------------------------ // <autogenerated> // This code was generated by a tool. // Runtime Version: 1.1.4322.2032 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // </autogenerated> //------------------------------------------------------------------------------
Collapse
Copy Code
// // This source code was auto-generated by xsd, Version=1.1.4322.2032. // using System.Xml.Serialization;
Collapse
Copy Code
/// <remarks/> [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)] public class Emp { /// <remarks/> public EmpInfo EmpInfo; } /// <remarks/> public class EmpInfo { /// <remarks/> public string Code; /// <remarks/> public string FirstName; /// <remarks/> public string LastName; /// <remarks/> public string Destination; }
Now, we could save an employee XML data to this class using the function:
Collapse
Copy Code
/// <summary> /// Returns an emp xsd class object based on the xml data passed /// </summary> /// <param name="xml">xml data of employee</param> /// <returns></returns> public Emp EmpObject(string xml) { StringReader stream = null; XmlTextReader reader = null; try { // serialise to object XmlSerializer serializer = new XmlSerializer(typeof(Emp)); stream = new StringReader(xml); // read xml data reader = new XmlTextReader(stream); // create reader // covert reader to object return (Emp)serializer.Deserialize(reader); } catch { return null; } finally { if(stream != null) stream.Close(); if(reader != null) reader.Close(); } }
And to get the XML based on the
Empclass object, use the following function:
Collapse
Copy Code
/// <summary> /// Returns the xml as string based on emp object values /// </summary> /// <param name="emp">object that would be converted into xml</param> /// <returns></returns> public string EmpXml(Emp emp) { MemoryStream stream = null; TextWriter writer = null; try { stream = new MemoryStream(); // read xml in memory writer = new StreamWriter(stream, Encoding.Unicode) ; // get serialise object XmlSerializer serializer = new XmlSerializer(typeof(Emp)); serializer.Serialize(writer, emp); // read object int count = (int) stream.Length; // saves object in memory stream byte[] arr = new byte[count]; stream.Seek(0, SeekOrigin.Begin); // copy stream contents in byte array stream.Read(arr, 0, count); UnicodeEncoding utf = new UnicodeEncoding(); // convert byte array to string return utf.GetString(arr).Trim(); } catch { return string.Empty; } finally { if(stream != null) stream.Close(); if(writer != null) writer.Close(); } }
License
This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.A list of licenses authors might use can be found here
相关文章推荐
- Python Web-第五周-Web Services and XML(Using Python to Access Web Data)
- using JS to control two select(html),the data can be loaded from database and XML,and show in the select
- ISO 8601: Delphi way to convert XML date and time to TDateTime and back (via: Stack Overflow)
- Convert Object to XML using LINQ
- Convert XML to Object using LINQ
- How To Submit Form Data by Using XMLHTTP or ServerXMLHTTP Object
- How to migrate data from another Mac using Mountain Lion and earlier
- Peoplecode to Create BI publisher XML and XSD Data source file.
- How to convert a simple DLINQ Query to a data set object
- Using XSLT and Open XML to Create a Word 2007 Document
- Using jQuery To Manipulate and Filter Data
- A Data Access Layer to persist business objects using attributes and reflection - Part II [无常译]
- A Data Access Layer to persist business objects using attributes and reflection - Part I
- Convert object to json and json to object in C#
- Pass data to CGI script and back with jQuery.ajax
- How to migrate data from another Mac using Mountain Lion and earlier
- 六、ERROR - Could not create and/or set value back on to object
- using iscroll.js and iscroll jquery plugin in android webview to scroll div and ajax load data.
- How to Integrate SAP Business Data Into SharePoint 2010 Using Business Connectivity Services and LINQ to SAP
- Python Web-第六周-JSON and the REST Architecture(Using Python to Access Web Data)