C# UWP/C关于存储应用程序用户数据的建议?

C# UWP/C关于存储应用程序用户数据的建议?,c#,xml,uwp,C#,Xml,Uwp,我需要一些关于存储数据的建议/意见 我的目标是存储用户输入的数据,然后频繁地引用它。我希望避免数据库存储,因为这些都将在本地引用。我知道您可以使用XML序列化对象等,我想知道您对数据存储的看法 如果我一步一步地告诉你我在做什么,可能会让你更好地了解我试图实现的目标: 用户加载程序 程序读取存储文件 不同的控件(如GridView和文本框)显示文档的特定部分,如名称、日期等 用户可以通过在整个工作表的不同字段中输入数据来添加到文件中 用户可以在需要时自由保存文件,可以在需要时创建新文件,并且可以

我需要一些关于存储数据的建议/意见

我的目标是存储用户输入的数据,然后频繁地引用它。我希望避免数据库存储,因为这些都将在本地引用。我知道您可以使用XML序列化对象等,我想知道您对数据存储的看法

如果我一步一步地告诉你我在做什么,可能会让你更好地了解我试图实现的目标:

  • 用户加载程序
  • 程序读取存储文件
  • 不同的控件(如GridView和文本框)显示文档的特定部分,如名称、日期等
  • 用户可以通过在整个工作表的不同字段中输入数据来添加到文件中
  • 用户可以在需要时自由保存文件,可以在需要时创建新文件,并且可以随时打开图纸
  • 所有信息都需要扩展。i、 e.用户最多可以添加50个日期、30个名称等,并且每个日期和名称都不能干扰其他数据字段。每个特定类型的所有这些数据都可以被ui控件引用
这是一个有点大的任务,我正在考虑使用XML来完成这一切。我不确定这是不是最好的方法,我想听听你的意见。主要是因为数据可以通过用户输入随时动态调整


如对此有任何意见,将不胜感激。如果有必要,我可以提供我试图实现的目标的图像。

我个人使用Newtonsoft JSON保存我的用户数据。您可以像平常一样构建所有类,然后相当轻松地集成JSON序列化器/反序列化器,而无需太多麻烦。可能会有一些例外情况需要自定义序列化程序,但创建这些例外情况并不困难,特别是当您只需要解释一小部分,然后就可以将文件的其余部分传递给默认序列化程序时

这是一个非常快速的示例,说明如何在一个文件中存储多个用户的一些键值首选项

using Newtonsoft.Json;

[JsonObject]
public class UserData {
    [JsonProperty] //Add a JSON property "Username" which is a string
    public string Username { get; set; }

    //IEnumerable types are converted to/from arrays automatically by Newtonsoft        
    [JsonProperty("Options")] //Set the name in JSON file to "Options"
    public Dictionary<string, string> Preferences { get; set; }

    [JsonIgnore] //Excludes this property from the JSON output
    public bool SaveRequired { get; set; } //Set true when a change is made, set false when saved
}
使用Newtonsoft.Json;
[JsonObject]
公共类用户数据{
[JsonProperty]//添加一个JSON属性“Username”,它是一个字符串
公共字符串用户名{get;set;}
//IEnumerable类型由Newtonsoft自动转换为数组或从数组转换
[JsonProperty(“Options”)]//将JSON文件中的名称设置为“Options”
公共词典首选项{get;set;}
[JsonIgnore]//从JSON输出中排除此属性
public bool SaveRequired{get;set;}//更改时设置为true,保存时设置为false
}
有类似的库,它们对XML做着完全相同的事情,但我没有太多的运气弄清楚它们,当我只需要一些我知道有效的东西时,我通常处于非常紧张的时间尺度上。
如果您能找到一个像样的XML库并了解如何正确使用它,我建议您使用XML而不是JSON,因为它具有严格的结构化特性,您可以通过提供一个编写良好的模式来包含模式版本并帮助集成到其他系统中。

为什么您认为需要避免数据库存储?如果是因为存储的数据在应用程序中保持本地状态,我认为这不是一个很好的理由。如果您的数据具有丰富的关系,那么一个简单的sqlite db就可以完成这项工作。如果您的数据是独立键值的集合,那么不需要关系数据库,您可以使用一个简单的json/xml文件好的,谢谢。我想我需要研究我的数据是否有关系。我相信这些值会相互交织在一起,也就是说,一个特定的项目名称旁边也会存储一个数据和值。所以也许数据库是最好的选择:)谢谢你的输入。我将对所有这些做一些研究,看看我能想出什么。我忘了在回答中提到,Newtonsoft.JSON可以通过NuGet软件包管理器获得,这使得在Visual Studio中进行C#开发更加容易。我设法找到了它,似乎做了我需要的:)我们将看看它能持续多久XD