如何在Silverlight中序列化派生类

时间:2009-02-04 20:42:52

标签: c# .net silverlight json serialization

我在XAML中创建了一个自定义控件,并添加了一些自定义属性。现在,我希望尽可能将其序列化为JSON。这是(基本上)我所拥有的:

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属性。   或者,你可以确保   type是public并且没有参数   构造函数 - 所有公共成员   然后将该类型序列化,并且   不需要任何属性。“

现在,当我将这些属性添加到MyCustomClass时,我当然会得到相同的例外情况,只有System.Windows.UIElement而不是MyCustomClass

那么,有没有办法使用现有的序列化方法序列化我的自定义派生类,或者我应该只为MyCustomClass编写自定义序列化方法?

1 个答案:

答案 0 :(得分:3)

我认为你最好在这里实现IXmlSerializable,因为你真的不想不加选择地序列化基类中的所有内容(我不相信你可以,坦率地说)。

相反,在MyCustomClass上实现IXmlSerializable,然后DataContractJsonSerializer将能够使用该实现来序列化到/来自JSON。