2012-08-27 4 views
0

Так я работаю над существующим приложением, которое имеет приятный маленький вспомогательный метод, который в конце концов вызывает ObjectStateFormatter Serialize() -. Вот код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); 
} 

Я правильно считать, что она игнорирует мое имущество, которое является Список

Благодаря Кен

+0

Какой выходной сигнал? И что вы ожидаете? – RvdK

+0

Допустим, у меня есть объект person со строкой Firstname, string Lastname и List Телефоны, он сериализует имя и фамилию, однако мой список всегда возвращается пустым, поэтому, когда я иду, чтобы сохранить, я потерял доступ к этим данным. – Kenn

ответ

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)%> 

и достаточно убедиться, что звонок для сериализации и десериализации дать мне список телефонов.

Смежные вопросы