public object Parse(string raw, Type settingType)
{
Type[] typeGenericArgs = settingType.GetGenericArguments();
IList list = Activator.CreateInstance(typeof(List<>).MakeGenericType(typeGenericArgs)) as IList;
if (!raw.IsNullOrEmpty())
{
string wrappedRaw = String.Format("<root>{0}</root>", raw);
XDocument doc = XDocument.Parse(wrappedRaw);
var items = from item in doc.Root.Descendants()
select item.Value;
ISettingParser elementParser = GetElementParser(settingType, typeGenericArgs[0]);
foreach (string item in items)
{
list.Add(elementParser.Parse(item, typeGenericArgs[0]));
}
}
return CreateReadOnlyCollection(typeGenericArgs, list);
}