FormCollectionオブジェクトをシリアル化しようとしていて、調査した内容に基づいてNameObjectCollectionBaseを継承し、GetObjectDataとISerializableも継承します。シリアライズ可能なのではないでしょうか?FormCollectionを直列化および逆シリアル化する方法は?
https://msdn.microsoft.com/en-us/library/system.web.mvc.formcollection(v=vs.118).aspx
ここで私がしようとしているものの抜粋です:
BinaryFormatter formatter = new BinaryFormatter();
//Serialize
using (MemoryStream stream = new MemoryStream())
{
formatter.Serialize(stream, data);
string test = Convert.ToBase64String(stream.ToArray());
Session["test"] = test;
};
//Deserialize
using (MemoryStream stream = new MemoryStream(Convert.FromBase64String((string)Session["test"])))
{
data = (FormCollection) formatter.Deserialize(stream);
}
私は、残念ながら、このエラーを得た:
System.Runtime.Serialization.SerializationException: Type 'System.Web.Mvc.FormCollection' in Assembly 'System.Web.Mvc, Version=5.2.3.0, Culture=neutral... is not marked as serializable.
これはシールクラスですので、私はできませんそれを拡張し、[Serializable]属性を追加してください。
私の質問は以下のとおりです。
私はこのようなFormCollectionをシリアル化できないのはなぜ?
そして、私はFormCollectionオブジェクトをシリアル化/逆シリアル化できますか?
が、これは多くのことを片付け、ありがとうございます!あなたの頭の上から、この例でBinaryFormatterが持つ潜在的な問題を考えることができますか? – WCGPR0
シリアル化されたデータをどこにも渡すつもりがない場合は、BinaryFormatterを使用しても問題ないと思います。しかし、フォームコレクションには、理論上、直列化できないオブジェクトが含まれることがある(ただしこれはあまり一般的ではありません)。 – Evk