XMLシリアル化が自分の設計で達成可能かどうかを誰かにアドバイスできますか?XMLシリアル化を使用してXMLとしてC#オブジェクトデータを格納する方法
「システム管理」アプリケーションのコア機能のコードを記述しました。私のプロジェクトのSprint 1では、すべてのデータをSprint 2のADO.Netを使用して置き換える一時的なXMLデータストアに保存する必要があります。
以下の記事のようなXMLシリアル化を使用して、 https://www.codeproject.com/Articles/483055/XML-Serialization-and-Deserialization-Part https://www.codeproject.com/Articles/487571/XML-Serialization-and-Deserialization-Part-2
I(私は思う)以下のクラスは、XMLとして保存する必要があります。文字列で複数のプロパティ
- Userクラスプロパティ名とintのリストUserID
- すべてのUserオブジェクトと1つ以上のUserAccessGroupオブジェクト(コンストラクタはparams UserAccessGroup []を使用)のListを保持するUserAdministrationクラス。これには、システム上でユーザーを追加/削除する方法、UserAccessGroupからユーザーIDを追加/削除する方法があります。
- UserAdministrationオブジェクトと、ログオンしているアプリケーションのUserAccessGroupオブジェクトを保持するUserVerificationクラス。ログオンの失敗と成功のカウントには2つのintがあり、ログオンするメソッドはすべての条件が満たされるとtrueを返し、そうでない場合はfalseを返します。
- 複数のプロパティを持つServiceRequestクラス
- すべてのServiceRequestオブジェクトのリストを保持し、それらを追加/削除/編集するメソッドを持つServiceRequestTrackerクラス。
私は私のプログラムファイル内に以下のコードがあります。
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
@Flater返信いただきありがとうございます!私は私のオブジェクトをシリアライズする方法はまだ分かりません。たとえば、UserAdministrationにはUsersのリストが含まれており、リストにユーザーを追加/削除するためのメソッドがあります。たとえば、UserAdministrationのaddUserメソッドを呼び出して新しいユーザーを追加します。新しいUserオブジェクトはどのようにしてXMLファイルに追加されますか? –
ルート要素が配列でない限り、任意のクラスのセットを直列化できます。ルート要素はuserAdminです。したがって、userAdminをシリアル化して、自動的に他のクラスのxmlを作成します。 – jdweng