public static ServiceResponse Deserialize(XmlReader reader, ServiceResponse serviceResponse) { if (reader.IsStartElement(DTD.Response.TagServiceResponse)) { if (serviceResponse == null) { serviceResponse = new ServiceResponse(); } if (!reader.IsEmptyElement) { reader.ReadStartElement(); do { #region <ERROR> if (reader.IsStartElement(DTD.Response.ServiceResponse.TagError)) { if (int.Parse(reader.GetAttribute(DTD.Error.TagNumber)) != 0) { throw XMLErrorSerializer.Deserialize(reader.ReadSubtree()); } else { reader.Skip(); } } #endregion <ERROR> #region <OID> if (reader.IsStartElement(DTD.TagOID)) { serviceResponse.Oid = XMLAdaptorOIDSerializer.Deserialize(reader.ReadSubtree()); } #endregion <OID> #region <Arguments> if (reader.IsStartElement(DTD.Response.ServiceResponse.TagArguments)) { serviceResponse.Arguments = XMLArgumentsSerializer.Deserialize(reader.ReadSubtree()); } #endregion <Arguments> } while (reader.Read()); } else { reader.Skip(); } } else { throw new ArgumentException("Xml Reader don't have the Service.Response in Start Element.", "XmlReader reader"); } return(serviceResponse); }
public static QueryResponse Deserialize(XmlReader reader, QueryResponse queryResponse) { if (reader.IsStartElement(DTD.Response.TagQueryResponse)) { if (!reader.IsEmptyElement) { reader.ReadStartElement(); #region <ERROR> if (reader.IsStartElement(DTD.Response.ServiceResponse.TagError)) { throw XMLErrorSerializer.Deserialize(reader.ReadSubtree()); } #endregion <ERROR> if (queryResponse == null) { queryResponse = new QueryResponse(); } bool lIsHeadProcessed = false; Dictionary <string, DataColumn> lHeadOid = null; Dictionary <string, DataColumn> lHeadCol = null; List <string> lDisplayset = null; List <int> lDuplicates = null; do { #region <Head>. if (reader.IsStartElement(DTD.Response.QueryResponse.TagHead)) { string lClassName = string.Empty; XmlHead.Deserialize(reader.ReadSubtree(), out lHeadOid, out lHeadCol, out lDisplayset, out lDuplicates, ref lClassName); queryResponse.ClassName = lClassName; lIsHeadProcessed = true; } #endregion <Head>. else { #region <Data>. if (reader.IsStartElement(DTD.Response.QueryResponse.TagData)) { if (lIsHeadProcessed) { queryResponse.Data = XmlData.Deserialize(reader.ReadSubtree(), lHeadOid, lHeadCol, lDuplicates, queryResponse.ClassName); if (queryResponse.Data != null) { queryResponse.Data.ExtendedProperties.Add(DataTableProperties.DisplaySetNames, lDisplayset); } } else { throw new ArgumentOutOfRangeException("Node Data from Query.Response is processed before Head node in Xml"); } } #endregion <Data>. else { #region <?> reader.Skip(); if (reader.NodeType == XmlNodeType.None) { break; } else { continue; } #endregion <?> } } } while (reader.Read()); } else { reader.Skip(); } } else { throw new ArgumentException(); } return(queryResponse); }