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));
}

留言

這個網誌中的熱門文章

WPF - 深入 Style

C# – M$ Chart Control 自定 ToolTip 的顯示

Vue.js - 基礎介紹教學