我正在拉我的头发。序列化时忽略属性
我想实现一个多步向导,并且我在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