Для вашего пользовательского атрибута DataAnnotations необходимо написать следующий код в вашем методе GetMessageFromResource:
private static string GetMessageFromResource(string resourceId)
{
var propertyInfo = typeof(DataResource).GetProperty(resourceId, BindingFlags.Static | BindingFlags.Public);
return propertyInfo.GetValue(null, null);
}
Этот код должен выполнять работу, предполагая, что в вашем вопросе есть ошибка, и должен присутствовать LocalizeDisplayNameAttribute, а неDisplayName one:
[DisplayName("NameString")]
public virtual string Name { get; set; }
В любом случае, я рекомендую использовать лямбда-аксессоры для получения локализованных строк из ресурсов, чтобы вы могли переименовывать / перемещаться по ним с помощью инструмента рефакторинга.