0

だから私は、最終的に ObjectStateFormatter Serialize() を呼び出す素敵な小さなヘルパー メソッドを持つ既存のアプリに取り組んでいます。コードは次のとおりです。

/// <summary>
/// Transforms a limited object serialization (LOS)-formatted object into a view-state value and places the results into a <see cref="T:System.IO.TextWriter"/> object.
/// </summary>
/// <param name="output">The <see cref="T:System.IO.TextWriter"/> to receive the transformed value. </param><param name="value">The LOS-formatted object to transform into a view-state value. </param>
public void Serialize(TextWriter output, object value)
{
  this.SerializeInternal(output, value);
}

private void SerializeInternal(TextWriter output, object value)
{
  string str = this._formatter.Serialize(value);
  output.Write(str);
}

List である私のプロパティを無視すると仮定するのは正しいですか?

ありがとうケン

4

1 に答える 1

0

疑問に思っている人がいれば、LosFormatter は確かにジェネリック リストをシリアル化します。ちょっとしたテストをしただけです。もちろん、継承したばかりのアーキテクチャのどこでこのことが失敗しているのかを突き止める必要がありますが、少なくとも動作することはわかっています。ここに私がまとめたサンプルがあります。

public ActionResult Index()
{
    ViewData["Message"] = "Welcome to ASP.NET MVC!";
    var Person = new Person
                     {
                         FirstName = "Ken",
                         LastName = "N",
                         Phones = new List<Phone>
                                      {
                                          new Phone {Ext = "O", PhoneNumber = "2341234"},
                                          new Phone {Ext = "O", PhoneNumber = "2341234"},
                                          new Phone {Ext = "O", PhoneNumber = "2341234"}
                                      }
                     };
    var serializedPersonObject = LosSerializeObject(Person);
    ViewData["PersonObject"] = serializedPersonObject;
    return View();
}

public ActionResult About()
{
    var personString = Request.QueryString[0];
    var person = (Person) RetrieveObjectFromViewState(personString);
    return View();
}

string LosSerializeObject(object obj)
{
    var los = new System.Web.UI.LosFormatter();
    var writer = new StringWriter();
    los.Serialize(writer, obj);
    return writer.ToString();
}

object RetrieveObjectFromViewState(string serializedObject)
{
    var los = new System.Web.UI.LosFormatter();
    return los.Deserialize(serializedObject);
}

次に、Index.ASPX ページのボタン

<%= Html.ActionLink("Check this", "About", "Home", new { person = ViewData["PersonObject"] }, null)%>

そして、Serialize と Deserialize を呼び出すと、Phones のリストが表示されます。

于 2012-08-28T02:10:20.787 に答える