示例#1
0
        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);
        }