2009-02-04 64 views
1

我在XAML中创建了自定义控件,并添加了一些自定义属性。现在,如果可能,我想将其序列化为JSON。这里是(本质)我有:如何序列化Silverlight中的派生类

public partial class MyCustomClass : UserControl 
{ 
    public Dictionary<char, int[]> ValueMap; 
    public int Value { get; set; } 
} 

而且在处理序列化的代码:

public static string Serialize(object objectToSerialize) 
{ 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     DataContractJsonSerializer serializer = 
      new DataContractJsonSerializer(objectToSerialize.GetType()); 
     serializer.WriteObject(ms, objectToSerialize); 
     ms.Position = 0; 
     using (StreamReader reader = new StreamReader(ms)) 
      return reader.ReadToEnd(); 
    } 
} 

然而,serializer.WriteObject(ms, objectToSerialize);抛出

System.Runtime.Serialization.InvalidDataContractException

它标记与 DataContractAttribute属性和 标志着其所有成员的你想 系列化与 DataMemberAttribute属性。 或者,你可以确保 类型是公共的,有一个无参数 构造 - 的 所有公共成员,那么该类型将被序列化,并 没有任何属性将被要求”

现在,当我做这些属性添加到MyCustomClass,我当然会得到相同的例外,只是这一次为System.Windows.UIElement,而不是MyCustomClass

那么,有没有一种方法来序列与现有序列化方法我的自定义派生类,或者我应该只需编写一个自定义的序列化方法ds代表MyCustomClass

回答

3

我觉得你最好在这里实现IXmlSerializable,因为你真的不想在基类中不分青红皂白地序列化所有东西(我不相信你可以,坦率地说)。

相反,落实MyCustomClass IXmlSerializable的,然后DataContractJsonSerializer将能够使用该实现从JSON序列化到/。

+0

哇,我决不会预计将IXmlSerializable的一个DataContractJsonSerializer工作,但它的作用。我想到的第一件事就是ISerializable的,但显然它不是在Silverlight的支持。 – 2009-02-05 05:25:32

相关问题