序列化时忽略属性

时间:2012-02-14 22:54:14

标签: asp.net-mvc-3 serialization asp.net-mvc-futures

我正在把头发拉出来。

我正在尝试实现一个多步骤向导,我在MVC3期货中使用Html.Serialize html助手。这很有效,除了我模型中的一个属性是SelectList。我不希望这个属性序列化(并且当它尝试时它会爆炸)。

我无法使用[NonSerialized],因为它仅适用于字段,而不适用于属性。我甚至尝试了一些其他正常的方法,例如[XmlIgnore](我认为它不会起作用)。

使用Html.Serialize时,是否有人可以建议忽略模型中属性的属性?

编辑:

我尝试序列化时得到的错误是InvalidDataContractException。有这样的信息:

  

类型'System.Web.Mvc.SelectList'无法序列化。请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员。如果类型是集合,请考虑使用CollectionDataContractAttribute对其进行标记。有关其他受支持的类型,请参阅Microsoft .NET Framework文档。

但是,如果我这样做,那么我必须用[DataMember]标记所有成员只是为了排除1个属性,这似乎有点愚蠢。

更新:

这个代码的一个简单示例(确保添加对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

1 个答案:

答案 0 :(得分:4)

public class MyViewModel
{
    [IgnoreDataMember]
    public SelectList Items { get; set; }

    ...
}

或简单地说:

public class MyViewModel
{
    public IEnumerable<SelectListItem> Items { get; set; }

    ...
}
相关问题