在Silverlight项目中,如果您想最大程度的减少xap包的大小,仅使用默认System.Xml命名空间下提供的功能来实现“XML序列化/反序列化”,恐怕XmlReader/XmlWriter将成为唯一选择了,下面是示例代码:
代码语言:javascript复制using System.IO;
using System.Text;
using System.Xml;
namespace slLib
{
public class Person
{
private string _name = "";
/// <summary>
/// 姓名
/// </summary>
public string Name
{
get { return _name; }
set { _name = value; }
}
private int _age = 0;
/// <summary>
/// 年龄
/// </summary>
public int Age
{
get { return _age; }
set { _age = value; }
}
/// <summary>
/// 将Person实例转化为xml字符串
/// </summary>
/// <returns></returns>
public string ToXmlString()
{
MemoryStream ms = new MemoryStream();
XmlWriter writer = XmlWriter.Create(ms);
writer.WriteStartDocument();
writer.WriteStartElement("data");
writer.WriteStartElement("person");
writer.WriteStartElement("name");
writer.WriteAttributeString("type", "String");
writer.WriteValue(this.Name);
writer.WriteEndElement();
writer.WriteStartElement("age");
writer.WriteAttributeString("type", "Int32");
writer.WriteValue(this.Age);
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
writer.Close();
byte[] bytes = ms.ToArray();
string result = Encoding.UTF8.GetString(bytes, 0, bytes.Length);
return result;
}
/// <summary>
/// 从xml字符串给Person实例属性赋值
/// </summary>
/// <param name="xmlString"></param>
public void FromXmlString(string xmlString)
{
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xmlString));
XmlReader reader = XmlReader.Create(ms);
reader.Read();
reader.ReadStartElement("data");
reader.ReadStartElement("person");
string nameType = reader.GetAttribute("type");
string nameValue = reader.ReadElementContentAsString();
string ageType = reader.GetAttribute("type");
int ageValue = reader.ReadElementContentAsInt();
reader.ReadEndElement();
reader.ReadEndElement();
reader.Close();
this._name = nameValue;
this._age = ageValue;
}
}
}