C# XML 反序列化错误:命名空间前缀“xsd”没有定义

发布于 2025-01-11 11:33:30 字数 1708 浏览 1 评论 0原文

我试图反序列化从 SOAP 响应收到的 XML 元素,但收到“命名空间前缀 'xsd' 未定义”错误。对此可能的解决方案是什么?

这是我得到的示例响应 XML:

<ns0:response xmlns:ns0="http://sample.site.com">
                <ns0:additionalData>
                    <ns0:entry>
                        <ns0:key xsi:type="xsd:string">Test Key</ns0:key>
                        <ns0:value xsi:type="xsd:string">1</ns0:value>
                    </ns0:entry>
                    <ns0:entry>
                        <ns0:key xsi:type="xsd:string">Test Code</ns0:key>
                        <ns0:value xsi:type="xsd:string">1</ns0:value>
                    </ns0:entry>
                </ns0:additionalData>
                <ns0:mpiData>
                    <ns1:authenticationResponse xmlns:ns1="http://sample.site2.com">Y</ns1:authenticationResponse>
                </ns0:mpiData>
            </ns0:response>

我用这种方式反序列化它:

XDocument xDocument = XDocument.Parse(responseText);

var responseElement = xDocument.Descendants().Where(a => a.Name.LocalName == response.ElementName).Select(a => a).Last();

            TResponse response = default(TResponse);

            Stream memoryStream = new MemoryStream();

            responseElement.Save(memoryStream);
            memoryStream.Seek(0, SeekOrigin.Begin);

            var serializer = new XmlSerializer(typeof(TResponse));

            using (XmlReader xmlReader = XmlReader.Create(memoryStream))
            {
                response = (TResponse)serializer.Deserialize(xmlReader);
            }

            return response;
        

I am trying to deserialize an XML element that I received from a SOAP response, but I am getting the "Namespace prefix 'xsd' is not defined" error. What's the possible solution for this?

Here's the sample response XML I'm getting:

<ns0:response xmlns:ns0="http://sample.site.com">
                <ns0:additionalData>
                    <ns0:entry>
                        <ns0:key xsi:type="xsd:string">Test Key</ns0:key>
                        <ns0:value xsi:type="xsd:string">1</ns0:value>
                    </ns0:entry>
                    <ns0:entry>
                        <ns0:key xsi:type="xsd:string">Test Code</ns0:key>
                        <ns0:value xsi:type="xsd:string">1</ns0:value>
                    </ns0:entry>
                </ns0:additionalData>
                <ns0:mpiData>
                    <ns1:authenticationResponse xmlns:ns1="http://sample.site2.com">Y</ns1:authenticationResponse>
                </ns0:mpiData>
            </ns0:response>

I'm deserializing it this way:

XDocument xDocument = XDocument.Parse(responseText);

var responseElement = xDocument.Descendants().Where(a => a.Name.LocalName == response.ElementName).Select(a => a).Last();

            TResponse response = default(TResponse);

            Stream memoryStream = new MemoryStream();

            responseElement.Save(memoryStream);
            memoryStream.Seek(0, SeekOrigin.Begin);

            var serializer = new XmlSerializer(typeof(TResponse));

            using (XmlReader xmlReader = XmlReader.Create(memoryStream))
            {
                response = (TResponse)serializer.Deserialize(xmlReader);
            }

            return response;
        

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

好久不见√ 2025-01-18 11:33:30

我认为 XML 缺少这一行

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance

I think the XML is missing this line

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance

北方。的韩爷 2025-01-18 11:33:30

添加来声明 xsd 命名空间前缀

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

通过在使用 xsd 的元素或其上方

。例如,将其添加到 ns0:response 元素中,该元素对于所有可能需要它的地方都是通用的:

<ns0:response xmlns:ns0="http://sample.site.com"
              xmlns:xsd="http://www.w3.org/2001/XMLSchema">

Declare the xsd namespace prefix by adding

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

at or above the element on which it's used.

For example, add it to the ns0:response element, which is common to all likely places it will be needed:

<ns0:response xmlns:ns0="http://sample.site.com"
              xmlns:xsd="http://www.w3.org/2001/XMLSchema">
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文