Windows.Storage на WP8 дает мне исключение десериализации
Я пытаюсь спасти ObservableCollection
используя новый метод в Windows Phone (Windows.Storage). У меня есть следующий класс, который является основой для моей наблюдаемой коллекции, которую я хочу сохранить:
[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);
в котором данные являются коллекцией, которая основана на settingsModel
, Вызов дает мне ошибку в последней строке SaveCollection
метод. Ошибка анализатора данных:
Исключение типа "System.Security.SecurityException" возникло в System.Runtime.Serialization.ni.dll, но не было обработано в коде пользователя
Дополнительная информация: Тип контракта данных коллекции 'System.Collections.ObjectModel.ObservableCollection`1[[WP_ADS.Model.SettingsModel, WP_ADS, Version=1.0.0.0, Culture= нейтральный, PublicKeyToken=null]]' не может быть десериализован, поскольку не иметь публичного конструктора без параметров. Добавление открытого конструктора без параметров исправит эту ошибку. Кроме того, вы можете сделать его внутренним и использовать атрибут InternalsVisibleToAttribute в своей сборке, чтобы включить сериализацию внутренних элементов - см. Документацию для получения дополнительной информации. Имейте в виду, что это имеет определенные последствия для безопасности.
Есть идеи, как это исправить?
(как показывает ошибка, я уже пытался добавить конструктор без параметров, сделав его внутренним, но оба безрезультатно).