Указанное свойство 'ErrorMessageResourceType' не найдено. на XmlSerialise - PullRequest
1 голос
/ 10 июня 2010

В моем приложении ASP.Net MVC у меня есть слой Model, который использует локализованные аннотации проверки для бизнес-объектов.

Код выглядит так:

[XmlRoot("Item")]
public class ItemBo : BusinessObjectBase
{
    [Required(ErrorMessageResourceName = "RequiredField", ErrorMessageResourceType = typeof(StringResource))]
    [HelpPrompt("ItemNumber")]
    public long ItemNumber { get; set; }

Это хорошо работает.

Когда я хочу сериализовать объект в XML, я получаю ошибку:

"Указанное свойство 'ErrorMessageResourceType' не найдено" (хотя оно теряется из-за других ошибок, это не исключение, над которым я пытаюсь работать.

Поэтому проблема заключается в использовании атрибутов DataAnnotations. Соответствующие файлы ресурсов находятся в другой сборке и помечены как «общедоступные», и, как я уже сказал, все работает хорошо, пока я не приступлю к сериализации.

У меня есть ссылки на соответствующий класс DataAnnotations и т. Д. В моих тестах nunit и целевом классе.

Кстати, HelpPrompt - это еще одна аннотация данных, которую я определил в другом месте, и она не вызывает проблемы.

Кроме того, если я изменю атрибут Required на стандартный формат, как показано ниже, сериализация работает нормально.

        [Required(ErrorMessage="Error")]

Кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 11 июня 2010

Ага, ответ оказался проще, чем я ожидал. Короче говоря, в сборке StringResource не было публичного статического свойства RequiredField.

Ошибка при поиске ошибки. При сериализации объекта мне пришлось ловить исключение при попытке создать экземпляр сериализатора

serial = new XmlSerializer(doc.GetType());

, а затем проработайте мой путь через иерархию исключений InnerException, чтобы проанализировать возникшее исключение InvalidOperationException и получить точное сообщение об ошибке, в котором говорилось, что было не так:

Тип ресурса 'StringResource' не имеет публично видимого статического свойства с именем 'RequiredField'.

Работает нормально сейчас

...