昨日の続き、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); } }