gpt4 book ai didi

c# - 如何序列化和反序列化 FormCollection?

转载 作者:行者123 更新时间:2023-11-30 23:11:57 24 4
gpt4 key购买 nike

我正在尝试序列化一个 FormCollection 对象,根据我的研究,它继承了 NameObjectCollectionBase,因此它也继承了 GetObjectData 和 ISerializable。这是否意味着它是可序列化的?

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] 属性。

我的问题是:

  1. 为什么我不能像这样序列化 FormCollection?

  2. 以及如何序列化/反序列化 FormCollection 对象?

最佳答案

  1. 不能这样序列化,因为它缺少[Serializable]属性。这意味着此类的开发人员无意使其可序列化(使用 BinaryFormatter)。事实上,它的父类实现了 ISerializable 并标有 [Serializable] 并没有改变任何东西——子类可能有它自己的内部细节,如果被允许,这些细节将在序列化过程中丢失序列化可序列化类的任何后代。

  2. 如果您想使用 BinaryFormatter(这可能是也可能不是最好的方法)- 您可以这样做:

    BinaryFormatter formatter = new BinaryFormatter();            
    //Serialize
    string serialized;
    using (MemoryStream stream = new MemoryStream())
    {
    // pass FormCollection to constructor of new NameValueCollection
    // that way we kind of convert it to NameValueCollection which is serializable
    // of course we lost any FormCollection-specific details (if there were any)
    formatter.Serialize(stream, new NameValueCollection(data));
    serialized = Convert.ToBase64String(stream.ToArray());
    };

    //Deserialize
    using (MemoryStream stream = new MemoryStream(Convert.FromBase64String(serialized))) {
    // deserialize as NameValueCollection then create new
    // FormCollection from that
    data = new FormCollection((NameValueCollection) formatter.Deserialize(stream));
    }

关于c# - 如何序列化和反序列化 FormCollection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44415592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com