【问题标题】:How to serialize a derived class in Silverlight如何在 Silverlight 中序列化派生类
【发布时间】:2009-02-04 20:42:52
【问题描述】:

我在 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编写自定义序列化方法?

【问题讨论】:

    标签: c# .net silverlight json serialization


    【解决方案1】:

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

    相反,在 MyCustomClass 上实现 IXmlSerializable,然后 DataContractJsonSerializer 将能够使用该实现与 JSON 进行序列化。

    【讨论】:

    • 哇,我从没想过 IXmlSerializable 会为 DataContractJsonSerializer 工作,但确实如此。我首先想到的是 ISerializable,但显然 Silverlight 不支持它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多