Игнорирование свойств при сериализации

Я вытаскиваю свои волосы на этом.

Я пытаюсь реализовать многошаговый мастер, и я использую Html.Serialize HTML помощник в фьючерсах MVC3. Это работает хорошо, за исключением одного из свойств в моей модели 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 ответ

Решение
public class MyViewModel
{
    [IgnoreDataMember]
    public SelectList Items { get; set; }

    ...
}

или просто:

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

    ...
}
Другие вопросы по тегам