Я вытягиваю свои волосы на этом.Игнорирование свойств при сериализации
Я пытаюсь реализовать многоэтапный мастер, и я использую html-помощник Html.Serialize
в фьючерсах MVC3. Это хорошо работает, за исключением одного из свойств моей модели: SelectList
. Я не хочу, чтобы это свойство сериализовалось (и оно взрывается, когда оно пытается в любом случае).
Я не могу использовать [NonSerialized]
, потому что это работает только с полями, а не с свойствами. Я даже пробовал некоторые другие обычные способы, такие как [XmlIgnore]
(который, как я думал, не будет работать в любом случае).
Может ли кто-нибудь предложить атрибут, который будет игнорировать свойство в модели при использовании Html.Serialize
?
EDIT:
Я получаю ошибку, когда я пытаюсь сериализации является 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] не делает ничего, либо. Я все равно получаю ту же ошибку Serialization, вероятно, потому, что в классе нет [DataContract] (это мое предположение). Тем не менее, добавление DataContract означает добавление атрибутов [DataMember], поэтому я не уверен, что это за цель. –
Вы говорите, что сериализатор игнорирует IEnumerables по умолчанию? –
@MystereMan, проблема связана с самим классом 'SelectList'. Он не может быть сериализован. Когда вы используете 'IEnumerable', свойство не игнорируется, но оно будет сериализоваться, если конкретным типом является, например, 'SelectListItem []' или 'List '. Я тестировал атрибут 'IgnoreDataMember', и он работал для меня с типом' SelectList'. Не могли бы вы показать суженную версию вашей модели просмотра, позволяющую воспроизвести проблему? –