我想序列化和反序列化从MvvmLight.ObservableObject
继承的模型对象。尝试使用System.Runtime.Serialization.Json.DataContractJsonSerializer.ReadObject
反序列化该对象会抛出一个System.Runtime.Serialization.InvalidDataContractException
,并带有以下信息,即基类(即MvvmLight.ObservableObject
)没有DataContractAttribute
或SerializableAttribute
。我的无效模型如下所示:
using GalaSoft.MvvmLight;
[DataContract]
public class MyModel : ObservableObject
{
[IgnoreDataMember]
private int _id;
[DataMember]
public int Id
{
get => _id;
set => Set(ref _id, value);
}
}
删除[DataContract]
之后,没有例外,但是也没有反序列化的数据。
一个解决方案可能是创建具有相同属性但不继承自ObservableObject的MyModel
副本MyModelSerializable
,并将其用于序列化。反序列化之后,可以使用MyModel
对象的数据来创建MyModelSerializable
对象。有更好的解决方案吗?
编辑:按要求链接到GalaSoft.MvvmLight.ObservableObject
:https://github.com/lbugnion/mvvmlight/blob/master/GalaSoft.MvvmLight/GalaSoft.MvvmLight%20(PCL)/ObservableObject.cs
答案 0 :(得分:0)
如果无法使用DataContract标记ObservableObject,则不能在此处使用DataContract属性。所以在您的情况下,我认为您无法标记ObservableObject。
您必须使用要序列化的所需项创建另一个类,而无需从类派生的ObservableObject
也许您可以在您的项目中实现(在另一个具有DataContract属性的序列化类中,该类看到MyModel):
[OnSerializing]
void PrepareForSerialization(StreamingContext sc)
{
//get items from MyModel and inject in new class serializable
}