2013-07-29 3 views
4

У меня есть следующий класс в веб-службе C# ASMX, а не в MVC или проекте веб-форм.Как проверить данные, хранящиеся в классе C#

public class Hotel 
{ 
    public int HotelId {get;set;} 
    public string Name {get;set;} 

    public Room[] Room { get; set; } 

    [Range(0, 12, ErrorMessage = "Rating must be between 1 and 5")] 
    public int Rating {get;set:} 
} 

public class Room 
{ 
    [Required]   
    public int RoomId {get;set;} 

    [Required] 
    [StringLength(175)] 
    public string Name {get; set;} 
} 

Использование System.ComponentModel.DataАнотации, поскольку я могу действовать как указано выше? Если да, то как мне получить ответ от ошибки проверки?

Также, когда служба запускается, я читаю объект данных Json, как показано ниже.

oHotelRequest = JsonConvert.DeserializeObject<Hotel>(sJson); 
    HotelResponse oHotelResponse = BookingAPI.Hotel.Get(oHotelRequest); 
    return JsonConvert.SerializeObject(oHotelResponse); 

Или я могу сделать валидацию при де-сериализации объекта?

ответ

2

Вы можете посмотреть эту веб-страницу: http://odetocode.com/blogs/scott/archive/2011/06/29/manual-validation-with-data-annotations.aspx

+0

Спасибо за ссылку. Я обновил свой вопрос со ссылкой на класс Room как общественный зал [] Room {get; задавать; }. Как это будет подтверждено? – Tommassiov

+0

После этого, если я создаю новый экземпляр объекта, такого как Hotel oHotel = new Hotel(); и они называют валидатор с первым oHotel, а затем oHotel.Room это работает. Это правильный подход? – Tommassiov

+0

Во-первых - Если вы не добавили никаких валидаций в поле «Номер» в классе отеля - там не было никакой проверки этого поля. Более того, поскольку я тестирую с небольшим фрагментом кода, нет автоматической вложенной проверки таким образом, поэтому даже вы отмечаете поле «Место» как обязательное, вы должны вручную проверить эти поля. Но вы можете сделать это более автоматическим, выполнив решение на поставляемом веб-сайте: реализуйте IValidatableObject для своих классов. Затем, в функции Hotel.Validate, вы можете принудительно выполнить проверку поля Room, используя Room.Validate (конечно, Room должен также реализовать интерфейс IValidatableObject). –