You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中无法将HttpResponseMessage的XML响应反序列化为对象

AWS STS AssumeRole XML反序列化修复方案

你遇到的问题主要出在两个核心点:XML命名空间未匹配,以及实体类的属性标记错误,同时还遗漏了部分字段。

问题1:XML命名空间未处理

原XML根节点带有命名空间xmlns="https://sts.amazonaws.com/doc/2011-06-15/",但你的实体类没有指定对应命名空间,导致XmlSerializer无法匹配节点,直接抛出反序列化错误。

问题2:Credentials类的标记错误与字段遗漏

  • XML里的AccessKeyId、SecretAccessKey等是子元素,但你代码里用了[XmlAttribute]标记,这会让序列化器去寻找节点的属性而非子元素,所以属性值始终为空。
  • 类名Credentialss多了一个冗余的s,建议改成Credentials贴合XML节点名,同时还遗漏了SessionToken和Expiration两个必要字段。

修正后的实体类代码

namespace TestHarness
{
    [XmlRoot(ElementName = "AssumeRoleResponse", Namespace = "https://sts.amazonaws.com/doc/2011-06-15/")]
    public class AssumeRoleResponse
    {
        [XmlElement(ElementName = "AssumeRoleResult", Namespace = "https://sts.amazonaws.com/doc/2011-06-15/")]
        public AssumeRoleResult AssumeRoleResult { get; set; }

        [XmlElement(ElementName = "ResponseMetadata", Namespace = "https://sts.amazonaws.com/doc/2011-06-15/")]
        public ResponseMetadata ResponseMetadata { get; set; }
    }

    public class AssumeRoleResult
    {
        [XmlElement(ElementName = "AssumedRoleUser", Namespace = "https://sts.amazonaws.com/doc/2011-06-15/")]
        public AssumedRoleUser AssumedRoleUser { get; set; }

        [XmlElement(ElementName = "Credentials", Namespace = "https://sts.amazonaws.com/doc/2011-06-15/")]
        public Credentials Credentials { get; set; }
    }

    public class AssumedRoleUser
    {
        [XmlElement(ElementName = "AssumedRoleId", Namespace = "https://sts.amazonaws.com/doc/2011-06-15/")]
        public string AssumedRoleId { get; set; }

        [XmlElement(ElementName = "Arn", Namespace = "https://sts.amazonaws.com/doc/2011-06-15/")]
        public string Arn { get; set; }
    }

    public class Credentials
    {
        [XmlElement(ElementName = "AccessKeyId", Namespace = "https://sts.amazonaws.com/doc/2011-06-15/")]
        public string AccessKeyId { get; set; }

        [XmlElement(ElementName = "SecretAccessKey", Namespace = "https://sts.amazonaws.com/doc/2011-06-15/")]
        public string SecretAccessKey { get; set; }

        [XmlElement(ElementName = "SessionToken", Namespace = "https://sts.amazonaws.com/doc/2011-06-15/")]
        public string SessionToken { get; set; }

        [XmlElement(ElementName = "Expiration", Namespace = "https://sts.amazonaws.com/doc/2011-06-15/")]
        public DateTime Expiration { get; set; }
    }

    public class ResponseMetadata
    {
        [XmlElement(ElementName = "RequestId", Namespace = "https://sts.amazonaws.com/doc/2011-06-15/")]
        public string RequestId { get; set; }
    }
}

反序列化代码说明

你的原反序列化代码无需改动,只要实体类修正后,就能正确处理带命名空间的XML响应,无需手动移除xmlns属性。

内容的提问来源于stack exchange,提问作者Fazla Elahi Md Jubayer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:22:04