protected override object [] MessageToParts (
MessageDescription md, Message message)
{
if (message.IsEmpty)
return null;
int offset = ParamsOffset (md.Body);
object [] parts = CreatePartsArray (md.Body);
XmlDictionaryReader r = message.GetReaderAtBodyContents ();
if (md.Body.WrapperName != null)
r.ReadStartElement (md.Body.WrapperName, md.Body.WrapperNamespace);
for (r.MoveToContent (); r.NodeType == XmlNodeType.Element; r.MoveToContent ()) {
XmlQualifiedName key = new XmlQualifiedName (r.LocalName, r.NamespaceURI);
MessagePartDescription rv = md.Body.ReturnValue;
if (rv != null && rv.Name == key.Name && rv.Namespace == key.Namespace)
parts [0] = GetSerializer (md.Body.ReturnValue).ReadObject (r);
else if (md.Body.Parts.Contains (key)) {
MessagePartDescription p = md.Body.Parts [key];
parts [p.Index + offset] = GetSerializer (p).ReadObject (r);
}
else // Skip unknown elements
r.Skip ();
}
if (md.Body.WrapperName != null && !r.EOF)
r.ReadEndElement ();
return parts;
}