главная причина для предотвращения выдачи исключения состоит в том, что существует много издержек, связанных с выдачей исключения.
Одна вещь статья ниже состояний - то, что исключение для исключительные условия и ошибки.
А неправильное имя пользователя является не обязательно ошибкой в программе, но пользовательской ошибкой...
Вот достойная начальная точка для исключений в.NET: http://msdn.microsoft.com/en-us/library/ms229030 (По сравнению с 80) .aspx
Обычно я обнаружил, что для сложных объектов лучше всего сериализовать, создав временный объект «промежуточный»:
Например, для отзывов я делаю следующее. На самом деле я делаю это в коде для моей страницы модели ASPX.
Это создает красивый объект JSON. Вы заметите, что я могу даже реорганизовать свою модель, и страница все равно будет работать. Это просто еще один уровень абстракции между моделью данных и страницей. Я не думаю, что мой контроллер должен знать о JSON как можно больше, но ASPX 'codebehind', безусловно, может.
/// <summary>
/// Get JSON for testimonials
/// </summary>
public string TestimonialsJSON
{
get
{
return Model.Testimonials.Select(
x => new
{
testimonial = x.TestimonialText,
name = x.name
}
).ToJSON();
}
}
В моем ASPX я просто делаю это в блоке:
var testimonials = <%= TestimonialsJSON %>;
// oh and ToJSON() is an extension method
public static class ObjectExtensions
{
public static string ToJSON(this Object obj)
{
return new JavaScriptSerializer().Serialize(obj);
}
}
Я готов к негативной реакции на это предложение ... давай ...
Я не обращаюсь к данным, я просто переформатирую модель для представления. Это логика «модели представления», а не логика «модели контроллера».
Я бы посоветовал использовать JSON.NET . Он позволяет сериализовать циклические ссылки и предоставляет гораздо больше возможностей сериализации.
Что сказал Саймон. Добавьте небольшое действие AutoMapper , чтобы контролировать вес кода.