Um. You do realize that the version you populated masks the class level version:
public List<string> ImageDescr { get; set; }
public ImageDescription()
{
...
List<string> ImageDescr = new List<string>();
try
{
...
ImageDescr.Add(string.Format("{0}/{1}", virtualPath, item.Name));
...
}
}
And what that means is that the data you filled in is discarded when the constructor exists, leaving the
public
version of ImageDescr unassigned and null?
I'd suggest that you start by following C# naming conventions, or assign the value instead of using a new variable:
public List<string> ImageDescr { get; set; }
public ImageDescription()
{
...
ImageDescr = new List<string>();
try
{