假设我有两个类,Person和Project:
class Person {
public int Id { get; set; }
public string Name { get; set; }
}
class Project {
public int Id { get; set; }
public string Name { get; set; }
public List<Person> Workers { get; set; }
}
我想将个人数据和项目数据存储在名为person的单独文件中。Json和project.json.
要序列化数据,我使用下面的语句:
JsonConvert.SerializeObject(Collection, Formatting.None, new JsonSerializerSettings()
{
NullValueHandling = NullValueHandling.Ignore,
TypeNameHandling = TypeNameHandling.All
};)
,集合是一个List<People>
。
要反序列化个人数据,我使用下面的语句:
JsonConvert.DeserializeObject<List<T>>(json, , new JsonSerializerSettings()
{
NullValueHandling = NullValueHandling.Ignore,
TypeNameHandling = TypeNameHandling.All
};)
其中json是person.json中的字符串json数据。我在列表框中显示List<Person>
。
现在我不确定我应该如何存储项目数据,以便每次我编辑一个人对象并最终将其保存到人。项目文件中List<Person>
对象中相应的person对象也随之更新。
我甚至不确定json是否是一个好方法,也许我应该尝试一个关系数据库。
如果我没有把我的情况解释清楚,请让我知道。我真的需要做的工作json和寻找解决我的问题。您的问题实际上不是针对序列化的,而是针对数据同步的。考虑一下,如果您使用XML、文本文件或一些自定义二进制格式,也会遇到同样的问题。
由于您已经将Person
对象反规范化为Project
对象,因此每次保存项目时,它将拥有所有人员数据的完整副本。
一种选择是不反规范化,而是将PersonID
的列表放入Project
对象中。根据哪个路径在你的应用程序中更突出,你也可以考虑在Person对象中添加一个ProjectID
列表。换句话说,这种关系可以用任意一种方式来表示。
无论如何,你都需要一些东西来管理你的数据。可能是编写一堆代码从磁盘加载所有JSON文件并自己操作它。它可能是将结构化数据映射到可以存储在SQL Server或MySQL等数据库中的关系模式。你可以使用像entityframework或NHibernate这样的ORM来帮助你。或者,你可以使用一个NoSQL数据库,如RavenDB或MongoDB,或许多其他类似的项目。
换句话说——保持序列化和存储的思想分离。有时序列化涉及到存储,但序列化也涉及到传输,许多存储引擎以自己自定义的方式处理序列化。