簡體   English   中英

WP8上的Windows.Storage給我反序列化異常

[英]Windows.Storage on WP8 gives me Deserialize exception

我正在嘗試使用Windows Phone(Windows.Storage)中的新方法保存ObservableCollection 我有以下類,這是我要保存的可觀察集合的基礎:

    [DataContract]
    class SettingsModel : INotifyPropertyChanged
    {

        public SettingsModel()
        { }

        [DataMember]
        private string _TargetIP {get; set;}

        public string TargetIP
        {
            get 
            {
                return _TargetIP;
            }
            set
            {
                _TargetIP = value;
                NotifyPropertyChanged("TargetIP");
            }
        }

        [DataMember]
        private string _TargetADS { get; set; }

        public string TargetADS
        {
            get
            {
                return _TargetADS;
            }
            set
            {
                _TargetADS = value;
                NotifyPropertyChanged("TargetADS");
            }
        }

        [DataMember]
        private string _ClientIP { get; set; }

        public string ClientIP
        {
            get 
            {
                return _ClientIP;
            }
            set
            {
                _ClientIP = value;
                NotifyPropertyChanged("ClientIP");
            }
        }

        [DataMember]
        private string _ClientADS { get; set; }

        public string ClientADS
        {
            get 
            {
                return _ClientADS;
            }
            set
            {
                _ClientADS = value;
                NotifyPropertyChanged("ClientADS");
            }
        }

        #region Notify property changed
        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged(string propertyName)
        {
            if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
        #endregion
    }
}

我保存可觀察集合的代碼是這樣的:

    public static async void SaveCollection<T>(string FileName, string FileExtension, ObservableCollection<T> Col) where T : class
    {
        // place file extension
        FileName = FileName + "." + FileExtension;

        // creating the file and replace the current file if the file allready exists
        var file = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync
            (FileName, 
            Windows.Storage.CreationCollisionOption.ReplaceExisting);

        // openup a new stream to the file (write)
        using (var Stream = await file.OpenStreamForWriteAsync())
        {

            // serialize the observable collection to a writable type
            var DataSerializer = new DataContractSerializer(typeof(ObservableCollection<T>),
                new Type[] { typeof(T) });

            // write data
            DataSerializer.WriteObject(Stream, Col);
        }
    }

靜態SaveCollection<t>方法的調用:

StorageHandler.SaveCollection<SettingsModel>("TestData", "txt", Data);

其中Data是基於settingsModel的集合。 該調用在SaveCollection方法的最后一行給我一個錯誤。 dataserializer的錯誤:

System.Runtime.Serialization.ni.dll中發生類型為'System.Security.SecurityException'的異常,但未在用戶代碼中處理

附加信息:無法反序列化收集數據協定類型'System.Collections.ObjectModel.ObservableCollection`1 [[WP_ADS.Model.SettingsModel,WP_ADS,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]。沒有公共的無參數構造函數。 添加公共的無參數構造函數將解決此錯誤。 或者,可以將其設置為內部,並在程序集中使用InternalsVisibleToAttribute屬性以啟用內部成員的序列化-有關更多詳細信息,請參見文檔。 請注意,這樣做有一定的安全隱患。

任何想法如何解決這個問題?

(錯誤提示,我已經嘗試添加無參數構造函數,使該構造函數成為內部結構,但兩者均無濟於事)。

[DataMember]放在公共屬性中

不要忘記將您的課程設為公開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM