首页 文章

如何在Silverlight中序列化派生类

提问于
浏览
1

我在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属性标记要序列化的所有成员 . 或者,您可以确保类型是公共的并且具有无参数构造函数 - 然后将序列化该类型的所有公共成员,并且不需要任何属性 .

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

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

1 回答

  • 3

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

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

相关问题