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继承的类。