C# 序列化从ObserveObject继承的模型
我想序列化和反序列化从C# 序列化从ObserveObject继承的模型,c#,serialization,mvvm-light,C#,Serialization,Mvvm Light,我想序列化和反序列化从MvvmLight.observateObject继承的模型对象。试图使用System.Runtime.Serialization.Json.DataContractJsonSerializer.ReadObject来反序列化对象抛出一个System.Runtime.Serialization.InvalidDataContractException,其中包含基类(即MvvmLight.ObservableObject)提供的信息没有DataContractAttribut
MvvmLight.observateObject
继承的模型对象。试图使用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]
后,没有异常,也没有反序列化数据
解决方案可以是创建名为MyModelSerializable
的MyModelSerializable
的副本,该副本具有相同的属性,但不继承自ObserveObject,并将其用于序列化。反序列化后,可以使用MyModelSerializable
对象的数据创建MyModel
对象。有更好的解决办法吗
编辑:根据请求,提供指向
GalaSoft.MvvmLight.observateObject的代码链接
:如果无法使用DataContract标记observateObject,则无法在此处使用DataContract属性。因此,在你的情况下,我认为你不能标记可观察的对象
您必须创建另一个类,其中包含要序列化的所需项,而无需类派生的ObserveObject
也许您可以在项目中实现(在另一个具有DataContract属性的序列化类中,可以看到MyModel):
[OnSerializing]
void PrepareForSerialization(StreamingContext sc)
{
//get items from MyModel and inject in new class serializable
}
你能更新“ObserveObject”的定义吗?这个错误意味着你有未知的类型来完成序列化,所以你能显示ObserveObject的代码吗?这能回答你的问题吗?这看起来是一个可能的解决方案,谢谢。我现在解决了这个问题,没有使用
System.Runtime.Serialization.Json.DataContractJsonSerializer
,而是使用Newtonsoft的Json序列化程序Json.Net,它使用从ObserveObject继承的类。