void DeserializeParameters(XmlDictionaryReader reader, PartInfo[] parts, object[] parameters) { if (parts.Length != parameters.Length) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new ArgumentException(SR.Format(SR.SFxParameterCountMismatch, "parts", parts.Length, "parameters", parameters.Length), nameof(parameters))); } int nextPartIndex = 0; while (reader.IsStartElement()) { for (int i = nextPartIndex; i < parts.Length; i++) { PartInfo part = parts[i]; if (IsPartElement(reader, part)) { parameters[part.Description.Index] = DeserializeParameter(reader, parts[i]); nextPartIndex = i + 1; } else { parameters[part.Description.Index] = null; } } if (reader.IsStartElement()) { OperationFormatter.TraceAndSkipElement(reader); } } }
void DeserializeParameters(XmlDictionaryReader reader, PartInfo[] parts, object[] parameters, bool isRequest) { int nextPartIndex = 0; while (reader.IsStartElement()) { for (int i = nextPartIndex; i < parts.Length; i++) { PartInfo part = parts[i]; if (part.Serializer.IsStartObject(reader)) { object parameterValue = DeserializeParameter(reader, part, isRequest); parameters[part.Description.Index] = parameterValue; nextPartIndex = i + 1; } else { parameters[part.Description.Index] = null; } } if (reader.IsStartElement()) { OperationFormatter.TraceAndSkipElement(reader); } } }
private object DeserializeResponse(XmlDictionaryReader reader, object[] parameters) { if (_responseWrapperName != null) { if (!reader.IsStartElement(_responseWrapperName, _responseWrapperNamespace)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new SerializationException(SR.Format(SR.SFxInvalidMessageBody, _responseWrapperName, _responseWrapperNamespace, reader.NodeType, reader.Name, reader.NamespaceURI))); } bool isEmptyElement = reader.IsEmptyElement; reader.Read(); if (isEmptyElement) { return(null); } } object returnValue = null; if (_returnPart != null) { while (true) { if (IsPartElement(reader, _returnPart)) { returnValue = DeserializeParameter(reader, _returnPart); break; } if (!reader.IsStartElement()) { break; } if (IsPartElements(reader, _responseParts)) { break; } OperationFormatter.TraceAndSkipElement(reader); } } DeserializeParameters(reader, _responseParts, parameters); if (_responseWrapperName != null) { reader.ReadEndElement(); } return(returnValue); }
protected override object DeserializeBody(XmlDictionaryReader reader, MessageVersion version, string action, MessageDescription messageDescription, object[] parameters, bool isRequest) { if (reader == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("reader")); } if (parameters == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("parameters")); } MessageInfo messageInfo; if (isRequest) { messageInfo = requestMessageInfo; } else { messageInfo = replyMessageInfo; } if (messageInfo.WrapperName != null) { if (!reader.IsStartElement(messageInfo.WrapperName, messageInfo.WrapperNamespace)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new SerializationException(SR.Format(SR.SFxInvalidMessageBody, messageInfo.WrapperName, messageInfo.WrapperNamespace, reader.NodeType, reader.Name, reader.NamespaceURI))); } bool isEmptyElement = reader.IsEmptyElement; reader.Read(); if (isEmptyElement) { return(null); } } object returnValue = null; if (messageInfo.ReturnPart != null) { while (true) { PartInfo part = messageInfo.ReturnPart; if (part.Serializer.IsStartObject(reader)) { returnValue = DeserializeParameter(reader, part, isRequest); break; } if (!reader.IsStartElement()) { break; } OperationFormatter.TraceAndSkipElement(reader); } } DeserializeParameters(reader, messageInfo.BodyParts, parameters, isRequest); if (messageInfo.WrapperName != null) { reader.ReadEndElement(); } return(returnValue); }