private void Deserialize(XmlElement node)
{
isUntitled = false;
XmlElement nameElement = node["Name"];
if (nameElement == null || nameElement.InnerText == "")
throw new InvalidDataException("Project's name cannot be empty.");
name = nameElement.InnerText;
foreach (XmlElement itemElement in node.GetElementsByTagName("ProjectItem"))
{
XmlAttribute typeAttribute = itemElement.Attributes["type"];
XmlAttribute assemblyAttribute = itemElement.Attributes["assembly"];
if (typeAttribute == null || assemblyAttribute == null)
throw new InvalidDataException("ProjectItem's type or assembly name is missing.");
string typeName = typeAttribute.InnerText;
string assemblyName = assemblyAttribute.InnerText;
try
{
Assembly assembly = Assembly.Load(assemblyName);
IProjectItem projectItem = (IProjectItem) assembly.CreateInstance(
typeName, false,
BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic,
null, null, null, null);
projectItem.Deserialize(itemElement);
projectItem.Clean();
Add(projectItem);
}
catch (InvalidDataException)
{
throw;
}
catch (Exception ex)
{
throw new InvalidDataException("Invalid type or assembly of ProjectItem.", ex);
}
}
}