private bool LoadItem(string name, IEnumerable<XPathNavigator> items, XmlNamespaceManager manager)
{
object value;
if (items.Count() > 1)
{
var collection = new SDataPayloadCollection();
if (!collection.Load(items, manager))
{
return false;
}
value = collection;
}
else
{
var item = items.First();
switch (InferItemType(item))
{
case ItemType.Property:
{
string nilValue;
if (item.TryGetAttribute("nil", Framework.Common.XSI.Namespace, out nilValue) && XmlConvert.ToBoolean(nilValue))
{
value = null;
}
else
{
value = item.Value;
}
break;
}
case ItemType.Object:
{
var obj = new SDataPayload();
if (!obj.Load(item, manager))
{
return false;
}
value = obj;
break;
}
case ItemType.PayloadCollection:
{
var collection = new SDataPayloadCollection();
if (!collection.Load(item, manager))
{
return false;
}
value = collection;
break;
}
case ItemType.SimpleCollection:
{
var collection = new SDataSimpleCollection();
if (!collection.Load(item))
return false;
value = collection;
break;
}
default:
return false;
}
}
Values.Add(name, value);
return true;
}