C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: オブジェクトのデシリアライズがうまくいきません


(過去ログ 41 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■21373 / inTopicNo.1)  オブジェクトのデシリアライズがうまくいきません
  
□投稿者/ やもり (4回)-(2008/07/01(Tue) 13:39:34)

分類:[.NET 全般] 

やもりといいます。よろしくおねがいします。

開発環境:VS2008C# .NET framework 2.0用

オブジェクトをシリアライズして保存し、復元してロードするというごく単純なことをやっていると思うのですが、うまくいきません。

シリアライズについては、http://dobon.net/vb/dotnet/file/xmlserializer.htmlを参考にしました

セーブ、ロードのところは



		void Save<T>(String saveFileName, T t)
		{
			XmlSerializer serializer = new XmlSerializer(typeof(T));
			using (FileStream fs = new FileStream(saveFileName, FileMode.Create))
			{
				serializer.Serialize(fs, t);
			}
		}

		new T Load<T>(String saveFileName)
		{
			XmlSerializer serializer = new XmlSerializer(typeof(T));

			if(File.Exists(saveFileName))
			{
				using (FileStream fs = new FileStream(saveFileName, FileMode.Open))
				{
					T t = (T)serializer.Deserialize(fs);
	/*bp*/				return t;
				}
			}
			return default(T);
		}

で、Loadを呼び出しているのが


			projects = Load<List<Project>>(saveProjectsFileName);

Projectというクラスは



	public class Project
	{
		String jamFileName;
		String jarFolderName;
		Server server;
		bool doStartUpMonitor;
		bool onMonitor;
		DateTime lastWriteTime;

		public Server Server { get { return server; } set { server = value; } }
		public String JamFileName { get { return jamFileName; } set { jamFileName = value; } }
		public String JarFolderName { get { return jarFolderName; } set { jamFileName = value; } }
		public DateTime LastWriteTime { get { return lastWriteTime; } set { lastWriteTime = value; } }
		public bool OnMonitor { get { return onMonitor; } set { onMonitor = value; } }
		public bool DoStartUpMonitor { get { return doStartUpMonitor; } set { doStartUpMonitor = value; } }

		public Project() { }

		public Project(String jamFileName, String jarFolderName, Server server)
		{
			Set(jamFileName, jarFolderName, server);
		}

		public void Set(String jamFileName, String jarFolderName, Server server)
		{
			this.jamFileName = jamFileName;
			this.jarFolderName = jarFolderName;
			this.server = new Server(server.HostName, server.UserName, server.Password);
		}

		public override string ToString()
		{
			return Path.GetFileNameWithoutExtension(jamFileName);
		}
	}

	public class Server
	{
		String hostName;
		String userName;
		String password;

		public String HostName { get { return hostName; } set { hostName = value; } }
		public String UserName { get { return userName; } set { userName = value; } }
		public String Password { get { return password; } set { password = value; } }

		public Server() { }

		public Server(String hostName, String userName, String password)
		{
			Set(hostName, userName, password);
		}

		public void Set(String hostName, String userName, String password)
		{
			this.hostName = hostName;
			this.userName = userName;
			this.password = password;
		}

		public override string ToString()
		{
			return this.hostName;
		}
	}


という感じになっています。

問題はデシリアライズで、bpの時点でtを見てみると、Project.JamFileNameが保存したときのProject.JarFolderName
となっていて、Project.JarFolderName == nullとなっているんです。

シリアライズしたファイルを表示すると保存内容のとおりとなっています。

たとえば

  <?xml version="1.0" ?> 
- <ArrayOfProject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <Project>
  <JamFileName>ggggg</JamFileName> 
  <JarFolderName>hhdjasedjh</JarFolderName> 
- <Server>
  <HostName>w6.oroti.com</HostName> 
  <UserName>dbz</UserName> 
  <Password>kosakasi</Password> 
  </Server>
  <LastWriteTime>0001-01-01T00:00:00</LastWriteTime> 
  <OnMonitor>false</OnMonitor> 
  <DoStartUpMonitor>false</DoStartUpMonitor> 
  </Project>
  </ArrayOfProject>

をデシリアライズすると

List<Project> l
l.Count == 1
l[0].JamFileName == "hhdjasedjh"
l[0].JarFileName == null
となります。(それ以外はファイル通り)

なぜかわかりません。

ちなみにList<>がわるいのかなと思って1Projectごとに保存しても同じ現象が見られました


引用返信 編集キー/
■21375 / inTopicNo.2)  Re[1]: オブジェクトのデシリアライズがうまくいきません
□投稿者/ シャノン (514回)-(2008/07/01(Tue) 13:54:40)
No21373 (やもり さん) に返信
> public String JamFileName { get { return jamFileName; } set { jamFileName = value; } }
> public String JarFolderName { get { return jarFolderName; } set { jamFileName = value; } }

set が両方とも JamFileName になってますけど…
引用返信 編集キー/
■21377 / inTopicNo.3)  Re[2]: オブジェクトのデシリアライズがうまくいきません
□投稿者/ やもり (5回)-(2008/07/01(Tue) 14:01:40)
No21375 (シャノン さん) に返信
> ■No21373 (やもり さん) に返信
>> public String JamFileName { get { return jamFileName; } set { jamFileName = value; } }
>> public String JarFolderName { get { return jarFolderName; } set { jamFileName = value; } }
>
> set が両方とも JamFileName になってますけど…

すいません。。ありがとうございます
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -