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

XML转C#实体类还原XML异常求助:缺失命名空间等属性

XML转C#实体类:解决命名空间与前缀缺失问题

先修正示例XML的语法错误

原示例中<PermissiblePurpose>标签未正确闭合,修正后如下:

<p:EIDVBusinessSearch xmlns:p="example.com" xmlns:xsi="abc.com" xsi:schemaLocation="cde.com">
  <PermissiblePurpose>
    <GLB>{{GLB}}</GLB>
    <DPPA>{{DPPA}}</DPPA>
    <VOTER>{{VOTER}}</VOTER>
  </PermissiblePurpose>
</p:EIDVBusinessSearch>

正确的C#实体类实现

通过XmlSerializer特性精准控制XML命名空间和前缀:

using System.Xml.Serialization;

[XmlRoot(ElementName = "EIDVBusinessSearch", Namespace = "example.com", Prefix = "p")]
public class EIDVBusinessSearch
{
    // 声明XML命名空间
    [XmlNamespaceDeclarations]
    public XmlSerializerNamespaces Xmlns { get; set; } = new XmlSerializerNamespaces();

    // 根元素的xsi:schemaLocation属性
    [XmlAttribute(AttributeName = "schemaLocation", Namespace = "abc.com")]
    public string SchemaLocation { get; set; } = "cde.com";

    [XmlElement(ElementName = "PermissiblePurpose")]
    public PermissiblePurpose PermissiblePurpose { get; set; }

    public EIDVBusinessSearch()
    {
        // 初始化命名空间绑定
        Xmlns.Add("p", "example.com");
        Xmlns.Add("xsi", "abc.com");
    }
}

public class PermissiblePurpose
{
    [XmlElement(ElementName = "GLB")]
    public string GLB { get; set; }

    [XmlElement(ElementName = "DPPA")]
    public string DPPA { get; set; }

    [XmlElement(ElementName = "VOTER")]
    public string VOTER { get; set; }
}

序列化代码示例

使用上述实体类生成符合要求的XML:

using System.IO;
using System.Xml.Serialization;

var request = new EIDVBusinessSearch
{
    PermissiblePurpose = new PermissiblePurpose
    {
        GLB = "{{GLB}}",
        DPPA = "{{DPPA}}",
        VOTER = "{{VOTER}}"
    }
};

var serializer = new XmlSerializer(typeof(EIDVBusinessSearch));
using var writer = new StringWriter();
serializer.Serialize(writer, request, request.Xmlns);
var outputXml = writer.ToString();

关键特性说明

  • XmlRoot:指定根元素的命名空间和前缀,确保生成<p:EIDVBusinessSearch>标签
  • XmlNamespaceDeclarations:用于定义XML文档中的命名空间声明(xmlns:p、xmlns:xsi)
  • XmlAttribute:为根元素添加xsi:schemaLocation属性,匹配API要求的格式
  • 子元素无p:前缀,因此无需额外指定命名空间,保持默认即可

内容的提问来源于stack exchange,提问作者Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:15:27