2011-03-21 79 views
4

那么我们还是没有Silverlight 4中的Serializable属性?我在网上有一些令人困惑的回应。当我尝试在我的代码中使用它时,出现名称空间错误。这些都是我包括Silverlight中的可序列化属性4

using System; 
using System.ComponentModel; 
using System.Collections.Generic; 
using System.Runtime.Serialization; 

我有组件系统,System.Runtime.Serialization添加到我的项目。

后续问题是,如果它不在Silverlight中,我该如何正确序列化一个单例?因为我正打算使用这里给出http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iserializable.aspx

感谢

回答

7

这就是你不能在Silverlight使用.NET属性的例子,但可以使用DataContract序列化。

对于独立的(非WCF)序列化/反序列化,有可以使用的三种组分:

System.Runtime.Serialization.DataContractSerializer(从System.Runtime.Serialization.dll) 系统。 Runtime.Serialization.Json.DataContractJsonSerializer(从System.ServiceModel.Web.dll) System.Xml.Serialization.XmlSerializer(从System.Xml.Serialization.dll)使用的DataContractSerializer

一个简单的例子:

string SerializeWithDCS(object obj) 
{ 
    if (obj == null) throw new ArgumentNullException("obj"); 
    DataContractSerializer dcs = new DataContractSerializer(obj.GetType()); 
    MemoryStream ms = new MemoryStream(); 
    dcs.WriteObject(ms, obj); 
    return Encoding.UTF8.GetString(ms.GetBuffer(), 0, (int)ms.Position); 
} 

来自这个线程的例子:http://forums.silverlight.net/forums/p/23161/82135.aspx

+0

我确实使用DataContract来序列化,但这意味着我可以结束多个单例类的实例。 – user642770 2011-03-22 08:41:01

+0

@ user642770有一个接口,顺便说一句;不知道它是否存在于SL中 – 2011-04-18 09:30:19