我在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
编写自定义序列化方法?
答案 0 :(得分:3)
我认为你最好在这里实现IXmlSerializable,因为你真的不想不加选择地序列化基类中的所有内容(我不相信你可以,坦率地说)。
相反,在MyCustomClass上实现IXmlSerializable,然后DataContractJsonSerializer将能够使用该实现来序列化到/来自JSON。