从ObservableObject继承的序列化模型

时间:2019-11-07 10:56:21

标签: c# serialization mvvm-light

我想序列化和反序列化从MvvmLight.ObservableObject继承的模型对象。尝试使用System.Runtime.Serialization.Json.DataContractJsonSerializer.ReadObject反序列化该对象会抛出一个System.Runtime.Serialization.InvalidDataContractException,并带有以下信息,即基类(即MvvmLight.ObservableObject)没有DataContractAttributeSerializableAttribute。我的无效模型如下所示:

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.ObservableObjecthttps://github.com/lbugnion/mvvmlight/blob/master/GalaSoft.MvvmLight/GalaSoft.MvvmLight%20(PCL)/ObservableObject.cs

的代码

1 个答案:

答案 0 :(得分:0)

如果无法使用DataContract标记ObservableObject,则不能在此处使用DataContract属性。所以在您的情况下,我认为您无法标记ObservableObject。

您必须使用要序列化的所需项创建另一个类,而无需从类派生的ObservableObject

也许您可以在您的项目中实现(在另一个具有DataContract属性的序列化类中,该类看到MyModel):

    [OnSerializing]
    void PrepareForSerialization(StreamingContext sc)
    {
        //get items from MyModel and inject in new class serializable
    }