Silverlight - 使用 Serializer 來實現 Clone 的功能.
在 Silverlight 中並不包括 ICloneable Interface 來實現複製的功能,故如需要複製的功能就需使用 Serializer 來實現了,此部份是使用 Json Serizlizer 來實作此部份.
首先 Model 需加上 DataContract / DataMember Attribute的部份.
[DataContract]
public class Circle
{
[DataMember]
public double Radius { set; get; }
[DataMember]
public double Shrink { set; get; }
public Circle()
{
Radius = 150;
}
其次使用下面的 Class 來達到 Serialize / Deserialize.
public static class JsonSerializer
{
public static string Serialize<T>(T obj)
{
string jsonString = string.Empty;
using (MemoryStream ms = new MemoryStream())
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
serializer.WriteObject(ms, obj);
ms.Position = 0;
using (StreamReader reader = new StreamReader(ms)) {
jsonString = reader.ReadToEnd();
}
}
return jsonString;
}
public static T DeSerialize<T>(string jsonString)
{
using (MemoryStream ms = new MemoryStream(System.Text.Encoding.Unicode.GetBytes(jsonString))) {
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
return (T)serializer.ReadObject(ms);
}
}
}
最後在其 Model 上加入 Clone Member 就可以實現複製的功能.
public Circle Clone()
{
return JsonSerializer.DeSerialize<Circle>(JsonSerializer.Serialize<Circle>(this));
}
留言
張貼留言