1

同志情谊,

我有以下问题。捕获列表结构,序列化(有效的 W3C)并发送到 WebService。在我收到的 WebService 中,转换为一个字符串,由 W3C 然后 Deserializer 有效,但是当我尝试运行它时,总是出现错误,说某些对象没有关闭。

有什么帮助吗?

发送代码:

#region ListToXML
    private XmlDocument ListToXMLDocument(object __Lista)
    {
        XmlDocument _ListToXMLDocument = new XmlDocument();

        try
        {
            XmlDocument _XMLDoc      = new XmlDocument();
            MemoryStream _StreamMem  = new MemoryStream();
            XmlSerializer _XMLSerial = new XmlSerializer(__Lista.GetType());

            StreamWriter _StreamWriter = new StreamWriter(_StreamMem, Encoding.UTF8);
            _XMLSerial.Serialize(_StreamWriter, __Lista);

            _StreamMem.Position = 0;
            _XMLDoc.Load(_StreamMem);
            if (_XMLDoc.ChildNodes.Count > 0)
                _ListToXMLDocument = _XMLDoc;
        }
        catch (Exception __Excp)
        {
            new uException(__Excp).GerarLogErro(CtNomeBiblioteca);
        }

        return _ListToXMLDocument;
    }
    #endregion

接收代码:

    #region XMLDocumentToTypedList
    private List<T> XMLDocumentToTypedList<T>(string __XMLDocument)
    {
        List<T> _XMLDocumentToTypedList = new List<T>();

        try
        {
            XmlSerializer _XMLSerial = new XmlSerializer(typeof(List<T>));
            MemoryStream _MemStream  = new MemoryStream();

            StreamWriter _StreamWriter = new StreamWriter(_MemStream, Encoding.UTF8);
            _StreamWriter.Write(__XMLDocument);

            _MemStream.Position = 0;
            _XMLDocumentToTypedList = (List<T>)_XMLSerial.Deserialize(_MemStream);
            return _XMLDocumentToTypedList;
        }
        catch (Exception _Ex)
        {
            new uException(_Ex).GerarLogErro(CtNomeBiblioteca);
            throw _Ex;
        }
    }
    #endregion
4

1 回答 1

0

经过一番努力,并检查了互联网上的一些代码,我设法解决了这个问题。我不知道是什么原因,但是,知道这种方式有效。代码下方。

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(__XMLDocument);

StringWriter stringWriter = new StringWriter();
XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter);
xmlDoc.WriteTo(xmlWriter);

XmlSerializer _XMLSerial = new XmlSerializer(typeof(List<tinfCte>));
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(stringWriter.ToString()));

stream.Position = 0;
_XMLDocumentToTInfCTeList = (List<tinfCte>)_XMLSerial.Deserialize(stream);
return _XMLDocumentToTInfCTeList;
于 2010-06-17T14:37:37.807 回答