【问题标题】:Call API return XML, how to use XmlSerializer to Deserialize the file to object?调用 API 返回 XML,如何使用 XmlSerializer 将文件反序列化为对象?
【发布时间】:2018-12-14 15:12:33
【问题描述】:

最近花了一些时间在这些上,想写一些笔记,希望对你有帮助。 第 1 步:进行 API 调用,注意 contentType 为:“application/xml” 您可以查看下面的示例代码。
第 2 步:棘手的部分是如何创建“myObject”类。
如果对象与返回的 XML 不完全匹配,那么您总是会收到 XML 反序列化错误并且毫无头绪。

查看下面我的答案以创建可以纠正反序列化的 .cs 类。

try
            {
                byte[] bHeaderBytes = System.Text.Encoding.UTF8.GetBytes(GetUserPasswordString());
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(cRequestString);
                request.Method = WebRequestMethods.Http.Get;
                request.PreAuthenticate = true;
                request.ContentType = "application/xml";
                request.Accept = "application/xml";
                request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(bHeaderBytes));
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(response.GetResponseStream());                                                           
                XmlNodeReader xReader = new XmlNodeReader(xmlDoc.DocumentElement);           
                return (myObject)xSerializer.Deserialize(xReader);                
            }
            catch
            {
                return null;
            }     

【问题讨论】:

    标签: xml api serialization xsd xmlserializer


    【解决方案1】:
    1. 调试代码,运行此行后,检查xmlDoc -> innerXML,复制到文本文件并在本地另存为.xml。您可以访问在线 XML 验证网站以确保 XML 是有效的。有时会添加一些额外的字符,从而导致问题。

      xmlDoc.Load(response.GetResponseStream());

    2. 创建 .xsd 文件,这可以在线完成。
    3. 创建类文件,例如:xsd.exe 的 .xsd 文件中的 .cs(可以下载) 您可能需要为此 exe 添加变量路径。
      安装后可以打开 Visual Studio 命令提示符-->
      输入:c:\temp>xsd.exe sample.xsd /classes
      然后 .cs 文件将在同一文件夹中创建。

    【讨论】:

      猜你喜欢
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多