XMLファイルに書き込む必要があるDictionaryオブジェクトがあります。 辞書には、キーとしての文字列型と、カスタムクラスのObject(System.Windows.Forms.Controlから派生)がValueとして含まれています。タイプを反映するエラーが発生しました - XMLシリアル化の問題
namespace SharpFormEditorDemo
{
[Serializable]
public static class common
{
public static Dictionary<String,CommonControl > dicControls = new Dictionary<string, CommonControl>();
public static Object objSelected = new Object();
public static int ctrlId = 0;
//The serialization and Deserialization methods.
public static void Serialize(XmlTextWriter xmlTextWriter,Dictionary<String,CommonControl> dic)
{
xmlTextWriter.WriteStartDocument();
ControlSerializer file = new ControlSerializer(dic);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ControlSerializer));
xmlSerializer.Serialize(xmlTextWriter, file);
xmlTextWriter.WriteEndDocument();
}
}
クラスCommonControlは、クラスCommonControlがコントロールクラスから導出され、この
namespace SharpFormEditorDemo
{
public class CommonControl : System.Windows.Forms.Control
{
//private List<String> controls;
private String sql;
private int minVal; //Minimum value for a field
private int maxVal; //Maximum value for a field
private string displayValue; //Display Value
private string keyValue; //Key Value
private string clickEvent; //Click event
private string selectedIndexChangeEvent; //Combo box event.
private string validateEvent; //Validated event.
public string SelectedIndexChangeEvent
{
get { return selectedIndexChangeEvent; }
set { selectedIndexChangeEvent = value; }
}
public string ClickEvent
{
get { return clickEvent; }
set { clickEvent = value; }
}
public string ValidateEvent
{
get { return validateEvent; }
set { validateEvent = value; }
}
public string KeyValue
{
get { return keyValue; }
set { keyValue = value; }
}
public string DisplayValue
{
get { return displayValue; }
set { displayValue = value; }
}
public int MinVal
{
get { return minVal; }
set { minVal = value; }
}
public int MaxVal
{
get { return maxVal; }
set { maxVal = value; }
}
public String Sql
{
get { return sql; }
set { sql = value; }
}
//public List<String> Controls
//{
// get { return controls; }
// set { controls = value; }
//}
}
}
のようなものです。
私がしたいことは、上記の辞書をXMLファイルに書き込むことです。その私がControlSerializerクラス
を使用して、この
try
{
XmlTextWriter xlw = new XmlTextWriter(@"D:\Test.xml", null);
common.Serialize(xlw, common.dicControls);
}
catch (Exception exShow)
{
問題のようにそれを呼び出すことで、私は を言って例外を得ているということですよため
[Serializable]
public class ControlSerializer : ISerializable
{
public ControlSerializer()
{
}
private Dictionary<String, CommonControl> dicCtrl;
public Dictionary<String, CommonControl> DicCtrl
{
get { return dicCtrl; }
set { dicCtrl = value; }
}
public ControlSerializer(Dictionary<String, CommonControl> dic)
{
this.DicCtrl = dic;
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
throw new NotImplementedException();
}
}
「エラーが発生しましたタイプ 'SharpFormEditorDemo.ControlSerializer'を反映しています。
しかし、typeof演算子を使用して型を取得しています。なぜこれが起こっているのか困惑した。申し訳ありませんが私はあまりにも長いが、完全な画像を与えたい場合。
おかげ
例外の詳細を投稿する。また、InnerExceptionsについても同様です。 – decyclone
こんにちはDecyclone ...迅速なヘルプのためのthnx内部例外メッセージはこのようなものです。それは私が使用している辞書オブジェクトがシリアライズ可能でないためですか? System.Collections.Generic.Dictionary'2 [System.String、mscorlib、Version = 2.0.0.0、Culture =ニュートラル、PublicKeyToken = b77a5c561934e089]のメンバーSharpFormEditorDemo.ControlSerializer.DicCtrlをシリアル化できません。[SharpFormEditorDemo.CommonControl、SharpFormEditorDemo、Version = 1.0.3996.27187、Culture =ニュートラル、PublicKeyToken = null]]、これはIDictionaryを実装しているためです。 – JCTLK