private static void UnmarshallResult(XmlUnmarshallerContext context, ListObjectsV2Response response)
{
int originalDepth = context.CurrentDepth;
int targetDepth = originalDepth + 1;
if (context.IsStartOfDocument)
targetDepth += 2;
while (context.Read())
{
if (context.IsStartElement || context.IsAttribute)
{
if (context.TestExpression("IsTruncated", targetDepth))
{
response.IsTruncated = BoolUnmarshaller.GetInstance().Unmarshall(context);
continue;
}
if (context.TestExpression("Contents", targetDepth))
{
// adding the bucket name into the S3Object instance enables
// a better pipelining experience in PowerShell
var s3Object = ContentsItemUnmarshaller.Instance.Unmarshall(context);
s3Object.BucketName = response.Name;
response.S3Objects.Add(s3Object);
continue;
}
if (context.TestExpression("Name", targetDepth))
{
response.Name = StringUnmarshaller.GetInstance().Unmarshall(context);
continue;
}
if (context.TestExpression("Prefix", targetDepth))
{
response.Prefix = StringUnmarshaller.GetInstance().Unmarshall(context);
continue;
}
if (context.TestExpression("Delimiter", targetDepth))
{
response.Delimiter = StringUnmarshaller.GetInstance().Unmarshall(context);
continue;
}
if (context.TestExpression("MaxKeys", targetDepth))
{
response.MaxKeys = IntUnmarshaller.GetInstance().Unmarshall(context);
continue;
}
if (context.TestExpression("CommonPrefixes", targetDepth))
{
var prefix = CommonPrefixesItemUnmarshaller.Instance.Unmarshall(context);
if(prefix != null)
response.CommonPrefixes.Add(prefix);
continue;
}
if (context.TestExpression("EncodingType", targetDepth))
{
response.Encoding = StringUnmarshaller.GetInstance().Unmarshall(context);
continue;
}
if (context.TestExpression("KeyCount", targetDepth))
{
response.KeyCount = IntUnmarshaller.GetInstance().Unmarshall(context);
continue;
}
if (context.TestExpression("ContinuationToken", targetDepth))
{
response.ContinuationToken = StringUnmarshaller.GetInstance().Unmarshall(context);
continue;
}
if (context.TestExpression("NextContinuationToken", targetDepth))
{
response.NextContinuationToken = StringUnmarshaller.GetInstance().Unmarshall(context);
continue;
}
if (context.TestExpression("StartAfter", targetDepth))
{
response.StartAfter = StringUnmarshaller.GetInstance().Unmarshall(context);
continue;
}
}
else if (context.IsEndElement && context.CurrentDepth < originalDepth)
{
return;
}
}
return;
}