1,xml简单的不能再简单的简介;
xml是一种可扩展的标记性语言,它具备描述复杂对象的能力;在跨语言跨平台信息交互系统中,得到广泛应用.由于其通用性和扩展性以及灵活性,使得xml能够在很多场合发挥自己优势,将复杂的对象关系简单化的描述并以文本方式来表达.
2,为了处理方便,将xml映射大对象
在不同平台下,个人是使用的开发语言各不相同,但他们都有一个共同的特性就是对xml或多或少的提供支持,有的直接对xml文本做解析处理,有的直接将xml渲染为对应的类的实例.下边是在C#中,XML和对象之间的互相转化的方式,在大型web交互接口设计中,此种方式经常用;
3,.net平台下,使用C#实现类与xml之间的序列化和反序列化
下边是一个Console程序,我们先设计一个家庭类,家庭中有很多成员,具体代码如下:
[Serializable]
public class Family
{
//[XmlElement(typeof(List<People>))]代表peoples将会被序列化为节点,并且包含多个子节点,子节点类型为People
[XmlElement(typeof(List<People>))]
public List<People> peoples;
}
家庭成员类
[Serializable]
public class People
{
//XmlElement用来标记,序列化后,次属性将会被转化为节点,而不是属性
[XmlElement]
public string name;
//XmlAttribute用来标记此属性会被序列化为xml节点中的属性,而不是单独成为节点
[XmlAttribute]
public string sex;
[XmlElement]
public string age;
}
序列化辅助类:
public class XmlHelper
{
/// <summary>
/// 将xml反序列化为类
/// </summary>
/// <param name="xml"></param>
/// <param name="obj"></param>
/// <returns></returns>
public static object XmlDeserailize(String xml, Type type)
{
if (string.IsNullOrEmpty(xml)) return null;
//实例化一个type类型的序列化对象
XmlSerializer serializer = new XmlSerializer(type);
//使用stringreader读取xml内容
StringReader reader = new StringReader(xml);
//使用stringreader来填充XmltextReader对象
XmlTextReader xmlReader = new XmlTextReader(reader);
//将xmlreader中的字符流序列化为对象
Object obj = serializer.Deserialize(xmlReader);
//关闭xmlreader
xmlReader.Close();
//关闭reader
reader.Close();
return obj;
}
/// <summary>
/// 将类序列化为xml文本
/// </summary>
/// <param name="type">要被序列化的对象的type</param>
/// <param name="isDflg">序列化时候是否进行缩进格式化</param>
/// <returns></returns>
public static String Xmlserailize(Object obj, bool isIndent)
{
if (obj == null) return "";
//xml命名空间
XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();
//此处不需要,所以添加为空
xmlns.Add(string.Empty, string.Empty);
//xml序列化器
XmlSerializer serializer = new XmlSerializer(obj.GetType());
//声明一块内存空间
MemoryStream ms = new MemoryStream();
//定义编码方式
Encoding utf8 = new UTF8Encoding(false);
//实例化一个XmlTextWriter对象,并且XmlTextWriter对象所关联的内存为ms,编码为Utf8
//向writer中写入数据相当于向writer所关联的ms中写入;
XmlTextWriter writer = new XmlTextWriter(ms, utf8);
string xml = string.Empty;
writer.Formatting = isIndent ? Formatting.Indented : Formatting.None;
//将obj对象写入writer对象,使用的命名空间为xmlns
serializer.Serialize(writer, obj, xmlns);
//从ms流中读取字符串(已经通过序列化器格式化后的流)
xml = utf8.GetString(ms.ToArray());
//刷新缓冲区
writer.Flush();
//关闭writer对象
writer.Close();
ms.Close();
return xml;
}
}
应用程序入口处调用如下:
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
//[STAThread]
static void Main()
{
Console.WriteLine("******************序列化*************************");
Family fl = new Family();
fl.peoples = new List<People>();
fl.peoples.Add(new People() { name = "waner", age = "18", sex = "男" });
fl.peoples.Add(new People() { name = "cidy", age = "8", sex = "女" });
String xml = XmlHelper.Xmlserailize(fl, true);
Console.WriteLine(xml);
//反序列化
Console.WriteLine("******************反序列化*************************");
Family f = (Family)XmlHelper.XmlDeserailize(xml, typeof(Family));
foreach (People p in f.peoples)
{
Console.WriteLine(String.Format("{0},{1},{2}",p.name,p.age,p.sex));
}
}
}
示例代码:http://download.youkuaiyun.com/detail/hulele2009/6550877
通过xml序列化和反序列化技术,再加上WebRequest对象和WebReponse对象,我们可以设计出更高效的接口;
http://blog.youkuaiyun.com/hulele2009/article/details/8488709