【发布时间】:2017-10-22 06:16:13
【问题描述】:
有人可以建议我的设计是否可以实现 XML 序列化?
我已经为我的“系统管理”应用程序的核心功能编写了代码。对于我项目的 Sprint 1,我必须将所有数据存储在临时 XML 数据存储中,该存储将在 Sprint 2 中使用 ADO.Net 进行替换。
我已经研究过使用 XML 序列化对类进行序列化,例如以下文章: https://www.codeproject.com/Articles/483055/XML-Serialization-and-Deserialization-Part https://www.codeproject.com/Articles/487571/XML-Serialization-and-Deserialization-Part-2
我有以下类(我认为)需要存储为 XML:
- 具有多个属性的用户类
- 具有字符串属性名称和整数用户ID 列表的 UserAccessGroup 类
- 一个 UserAdministration 类,包含所有用户对象和一个或多个 UserAccessGroup 对象的列表(构造函数使用参数 UserAccessGroup[])。它具有在系统上添加/删除用户、从 UserAccessGroup 添加/删除用户 ID 的方法。
- 一个 UserVerification 类,它包含一个 UserAdministration 对象和正在登录的应用程序的 UserAccessGroup 对象。它还有两个用于计算失败和成功登录尝试的整数,一个用于登录的方法,如果满足所有条件,则返回 true,否则返回 false。
- 具有多个属性的 ServiceRequest 类
- 一个 ServiceRequestTracker 类,它包含所有 ServiceRequest 对象的列表,并具有添加/删除/编辑它们的方法。
我的程序文件中有以下代码:
static void Main()
{
UserAccessGroup SystemAdmin_App = new UserAccessGroup("Admin Operators");
UserAccessGroup Shareholder_App = new UserAccessGroup("Shareholders");
UserAccessGroup Broker_App = new UserAccessGroup("Brokers");
UserAccessGroup StockExMgr_App = new UserAccessGroup("StockExMgrs");
UserIDGenerator IDGenerator = new UserIDGenerator();
UserAdministration userAdmin = new UserAdministration(IDGenerator,
SystemAdmin_App, Shareholder_App, Broker_App, StockExMgr_App);
UserVerificationService userVerification = new UserVerificationService(
userAdmin, SystemAdmin_App);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
LoginScreen myLoginScreen = new LoginScreen();
Application.Run(myLoginScreen);
}
现在我已经使用 TDD 完成了所有类的编写,我才开始研究将对象数据存储为 XML。我发现将 XML 序列化应用于我的设计非常令人困惑,我想知道是否可以在不从头开始完全重新设计我的应用程序的情况下实现这一点?
这里的任何帮助将不胜感激!
【问题讨论】:
-
如果您使用现有的 XML 序列化程序,通常只需将
[Serializable]属性放在一个类上并将您的对象传递给序列化程序;特别是如果您以后只打算让同一个应用程序反序列化对象。一个警告:您必须[XmlIgnore]任何可能导致循环引用的属性。例如。如果 Parent 具有 Child 属性,并且该 Child 对象具有引用相同连接的 Parent 属性。您的序列化程序将陷入循环并导致堆栈溢出。 -
@Flater 感谢您的回复!我仍然不确定如何序列化我的对象。例如,UserAdministration 包含一个用户列表,并具有从列表中添加/删除用户的方法。例如,我通过调用 UserAdministration 的 addUser 方法添加一个新用户。新的 User 对象如何添加到 XML 文件中?
-
只要根元素不是数组,任何一组类都可以被序列化。您的根元素是 userAdmin。所以你应该序列化 userAdmin,它会自动为其他类创建 xml。
-
@MichaelHennigan:我将添加一个答案,显示自定义类的基本序列化示例。如何存储数据(每个类类型的单独文件、一个大文件、每个父子家庭的单独文件……)完全取决于您。
标签: c# .net xml serialization deserialization