我在 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);
throws
System.Runtime.Serialization.InvalidDataContractException
:
考虑用
DataContractAttribute 属性,以及
标记您想要的所有成员
连载于
DataMemberAttribute 属性。
或者,您可以确保
类型是公共的并且无参数
构造函数 - 的所有公共成员
然后该类型将被序列化,并且
不需要任何属性。”
现在,当我将这些属性添加到MyCustomClass
,我当然得到同样的例外,只是这一次System.Windows.UIElement
代替MyCustomClass
.
那么,有没有一种方法可以使用现有的序列化方法序列化我的自定义派生类,或者我应该为MyCustomClass
?
我认为你最好在这里实现 IXmlSerialized,因为你真的不想不加区别地序列化基类中的所有内容(坦率地说,我不相信你可以)。
相反,在 MyCustomClass 上实现 IXmlSerializable,然后 DataContractJsonSerializer 将能够使用该实现来序列化到 JSON 或从 JSON 进行序列化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)