|
分類:[.NET 全般]
いつもお世話になっております、ホエホエです。
タイトルにもありますが、CollectionBaseクラスを派生し
Info構造体をリストに格納し、名称等のメンバ変数を持つ
独自コレクションクラスを作成し、XML書込をWriteメソッドで
行おうと思ったのですが、リストの中身の各Info構造体は
書込まれるんですが、InfoCollectionクラス自身が持つ
メンバ変数「m_strName」の内容がXMLファイルに出力されません。
意図的にメンバ変数をXML出力対象から省く属性はあるようですが
特に何も属性を記載しなければ書込みになると思ったのですが…
とりあえず以下にコードを記載させていただきます。
[Serializable]
public struct Info
{
public int nA;
public double dB;
public string strC;
}
public class InfoCollection : CollectionBase
{
protected string m_strName = "";
public string Name
{
get{ return m_strName; }
set{ m_strName = value; }
}
protected InfoCollection()
{
}
public InfoCollection( string p_strName ) : this()
{
m_strName = p_strName;
}
public int Add( Info p_AddInfo )
{
return InnerList.Add( p_AddInfo );
}
public Info this[int index]
{
get { return (Info)InnerList[index]; }
set { InnerList[index] = value; }
}
public bool Write( string p_strPath )
{
bool bRet = false;
FileStream fs = null;
try
{
fs = new FileStream( p_strPath, FileMode.Create, FileAccess.Write );
System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer( typeof( InfoCollection ) );
xs.Serialize( fs, this );
fs.Close();
bRet = true;
}
catch
{
bRet = false;
}
finally
{
if( fs != null )
{
fs.Close();
}
}
return bRet;
}
}
static class Program
{
[STAThread]
static void Main()
{
InfoCollection listInfo = new InfoCollection( "情報リスト" );
for( int nIndex = 0; nIndex < 10; nIndex++ )
{
Info AddInfo;
AddInfo.nA = 100 + nIndex;
AddInfo.dB = AddInfo.nA / 1000.0;
AddInfo.strC = string.Format( "データ{0}", nIndex );
listInfo.Add( AddInfo );
}
listInfo.Write( strPath );
}
}
このコードで何か不足 or マズい部分があるのでしょうか?
ご存知の方、教えてください。
ちなみに環境は
WindowsXP SP3
VisualStudio2003 or 2008
です。
|