教程问题 - 序列化数据 from/to 磁盘
Issues with tutorial - Serializing data from/to disk
所以我正在尝试通过此处的 Catel 'getting started' 示例工作:
https://catelproject.atlassian.net/wiki/display/CTL/Getting+started+with+WPF
但是我在第 3 步(序列化数据 from/to 磁盘)的 visual studio 中遇到了一些错误 - https://catelproject.atlassian.net/wiki/pages/viewpage.action?pageId=15630363
我创建了一个名为 'Settings' 的 'top container' 模型和一个名为 'Global' 的 'child class' (与教程几乎完全相同,只是属性较少且不同型号名称)。
我根据示例创建一个接口:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using App.Models;
namespace App.Services.Interfaces
{
public interface IGlobalService
{
IEnumerable<Global> LoadGlobals();
void SaveGlobals(IEnumerable<Global> globals);
}
}
然后我创建服务实现:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Catel.Collections;
using Catel.Data;
using App.Models;
using App.Services.Interfaces;
namespace App.Services
{
public class GlobalService : IGlobalService
{
private readonly string _path;
public GlobalService()
{
string directory = Catel.IO.Path.GetApplicationDataDirectory("CatenaLogic", "WPF.GettingStarted");
_path = Path.Combine(directory, "global.xml");
}
public IEnumerable<Global> LoadGlobals()
{
if (!File.Exists(_path))
{
return new Global[] { };
}
using (var fileStream = File.Open(_path, FileMode.Open))
{
var settings = Settings.Load(fileStream, SerializationMode.Xml);
return settings.Globals;
}
}
public void SaveGlobals(IEnumerable<Global> globals)
{
var settings = new Settings();
settings.Globals.ReplaceRange(globals);
settings.Save(_path, SerializationMode.Xml);
}
}
}
Visual studio 然后抛出 2 个错误和一个警告:
Error CS0619 'SavableModelBase.Load(Stream,
SerializationMode)' is obsolete: 'Please use Load(Stream,
SerializationMode, ISerializationConfiguration)
instead. Will be
removed in version
5.0.0.'
Error CS0619 'SavableModelBase.Save(string,
SerializationMode)' is obsolete: 'Please use Save(string,
SerializationMode, ISerializationConfiguration)
instead. Will be
removed in version 5.0.0.'
Warning CS0618 'CollectionExtensions.ReplaceRange(ObservableCollection,
IEnumerable)' is obsolete: 'Please use ReplaceRange(this
ICollection<T>, IEnumerable<T>)
instead. Will be treated as an error
from version 5.0.0. Will be removed in version 5.0.0.'
到目前为止,我对此所做的所有研究都是空白。什么是 'ISerializationConfiguration' 以及如何实现它?我是否漏掉了一些明显的东西?
设置为:
- Visual Studio 2015 社区(14.0.25425.01 更新 3)
- 针对 .NET 4.5.2 的项目
- 项目已使用新建 > 联机 > 使用 Catel 的 WPF 应用程序初始化
- NuGet:
- Catel.Core 4.5.3
- Catel.Extensions.Controls 4.5.3
- Catel.MVVM 4.5.3
- Catel.Fody 2.14.0
如有任何帮助,我们将不胜感激。
使用错误/警告指定的重载:
Load(stream, null);
Save(stream, null);
所以我正在尝试通过此处的 Catel 'getting started' 示例工作:
https://catelproject.atlassian.net/wiki/display/CTL/Getting+started+with+WPF
但是我在第 3 步(序列化数据 from/to 磁盘)的 visual studio 中遇到了一些错误 - https://catelproject.atlassian.net/wiki/pages/viewpage.action?pageId=15630363
我创建了一个名为 'Settings' 的 'top container' 模型和一个名为 'Global' 的 'child class' (与教程几乎完全相同,只是属性较少且不同型号名称)。
我根据示例创建一个接口:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using App.Models;
namespace App.Services.Interfaces
{
public interface IGlobalService
{
IEnumerable<Global> LoadGlobals();
void SaveGlobals(IEnumerable<Global> globals);
}
}
然后我创建服务实现:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Catel.Collections;
using Catel.Data;
using App.Models;
using App.Services.Interfaces;
namespace App.Services
{
public class GlobalService : IGlobalService
{
private readonly string _path;
public GlobalService()
{
string directory = Catel.IO.Path.GetApplicationDataDirectory("CatenaLogic", "WPF.GettingStarted");
_path = Path.Combine(directory, "global.xml");
}
public IEnumerable<Global> LoadGlobals()
{
if (!File.Exists(_path))
{
return new Global[] { };
}
using (var fileStream = File.Open(_path, FileMode.Open))
{
var settings = Settings.Load(fileStream, SerializationMode.Xml);
return settings.Globals;
}
}
public void SaveGlobals(IEnumerable<Global> globals)
{
var settings = new Settings();
settings.Globals.ReplaceRange(globals);
settings.Save(_path, SerializationMode.Xml);
}
}
}
Visual studio 然后抛出 2 个错误和一个警告:
Error CS0619 'SavableModelBase.Load(Stream, SerializationMode)' is obsolete: 'Please use
Load(Stream, SerializationMode, ISerializationConfiguration)
instead. Will be removed in version 5.0.0.'Error CS0619 'SavableModelBase.Save(string, SerializationMode)' is obsolete: 'Please use
Save(string, SerializationMode, ISerializationConfiguration)
instead. Will be removed in version 5.0.0.'Warning CS0618 'CollectionExtensions.ReplaceRange(ObservableCollection, IEnumerable)' is obsolete: 'Please use
ReplaceRange(this ICollection<T>, IEnumerable<T>)
instead. Will be treated as an error from version 5.0.0. Will be removed in version 5.0.0.'
到目前为止,我对此所做的所有研究都是空白。什么是 'ISerializationConfiguration' 以及如何实现它?我是否漏掉了一些明显的东西?
设置为:
- Visual Studio 2015 社区(14.0.25425.01 更新 3)
- 针对 .NET 4.5.2 的项目
- 项目已使用新建 > 联机 > 使用 Catel 的 WPF 应用程序初始化
- NuGet:
- Catel.Core 4.5.3
- Catel.Extensions.Controls 4.5.3
- Catel.MVVM 4.5.3
- Catel.Fody 2.14.0
如有任何帮助,我们将不胜感激。
使用错误/警告指定的重载:
Load(stream, null);
Save(stream, null);