ひっそりと生きるプログラマのブログ

日頃気になった事なりを書き留めるブログです。関心ごとは多くもう少し更新頻度を上げたいところです。

ASP.NET MVC 拡張メソッド - 2

昨日の続き、Xml形式ではなく、Base64形式の方が無難。
※ViewStateをイメージして頂くと分かり易い。

public static MvcHtmlString ToSerialize(this HtmlHelper value, string name, object item)
{
    if (null == item) return InputExtensions.Hidden(value, string.Empty);
    using (var memoryStream = new MemoryStream())
    {
        var formatter = new BinaryFormatter();
        formatter.Serialize(memoryStream, item);
        var bytes = Convert.ToBase64String(memoryStream.ToArray());
        return InputExtensions.Hidden(value, name, bytes);
    }
}

で、上記の結果をデシリアライズする方法。
※ Hidden の領域から取得した結果を引数としている。

public static object ToDeserialize(string value)
{
    var item = Convert.FromBase64String(value);

    using (var memoryStream = new MemoryStream())
    {
        memoryStream.Write(item, 0, item.Length);
        memoryStream.Seek(0, SeekOrigin.Begin);
        var formatter = new BinaryFormatter();
        return formatter.Deserialize(memoryStream);
    }
}