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