我正在拉我的頭髮。序列化時忽略屬性
我想實現一個多步向導,並且我在MVC3期貨中使用了Html.Serialize
html helper。這很好,除了我的模型中的一個屬性是SelectList
。我不希望這個屬性序列化(當它嘗試時它會炸燬)。
我不能使用[NonSerialized]
,因爲它只適用於字段,而不適用於屬性。我甚至嘗試了一些其他正常的方式,如[XmlIgnore]
(我不認爲它會起作用)。
任何人都可以在使用Html.Serialize
時提出一個屬性,該屬性將忽略模型中的屬性?
編輯:
我得到的,當我嘗試序列化的錯誤是InvalidDataContractException。有這樣的消息:
類型'System.Web.Mvc.SelectList'不能序列化。考慮使用DataContractAttribute屬性標記它,並使用DataMemberAttribute屬性標記要序列化的所有成員。如果類型是一個集合,請考慮使用CollectionDataContractAttribute來標記它。有關其他支持的類型,請參閱Microsoft .NET Framework文檔。
但是,如果我這樣做,那麼我必須所有[DataMember]
成員痕剛排除1個屬性,這似乎有點愚蠢。
UPDATE:
的這一個簡單的例子是該位的代碼(確保添加引用System.Runtime.Serialization.dll):
test.cs中
[Serializable]
public class Test
{
public int ID { get; set; }
[IgnoreDataMember]
public SelectList TestList { get; set; }
}
HomeController.cs
public ActionResult About()
{
return View(new Test() { ID = 0, TestList = new SelectList(new [] {""})});
}
首頁/ About.cshtml
@using Microsoft.Web.Mvc
@model MvcApplication3.Models.Test
@Html.Serialize("Test", Model)
這產生InvalidDataContractException
[IgnoreDataMember]沒有做任何事情無論是。我仍然得到相同的序列化錯誤,可能是因爲該類沒有[DataContract](這是我的猜測)。但是,添加DataContract意味着添加[DataMember]屬性,所以我不確定其用途。 – 2012-02-15 04:54:00
你是說默認情況下序列化器忽略IEnumerables? – 2012-02-15 04:55:01
@MystereMan,問題在於'SelectList'類本身。它不能被序列化。當你使用IEnumerable時,屬性不會被忽略,但是如果具體類型是例如'SelectListItem []'或者'List ',它將會被序列化。我已經測試了'IgnoreDataMember'屬性,它適用於我的'SelectList'類型。你能否展示一個縮小版本的視圖模型來重現問題? –
2012-02-15 06:32:35