我在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 回答
我认为你最好在这里实现IXmlSerializable,因为你真的不想不加选择地序列化基类中的所有东西(我不相信你可以,坦率地说) .
相反,在MyCustomClass上实现IXmlSerializable,然后DataContractJsonSerializer将能够使用该实现来序列化到JSON或从JSON序列化 .