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

C# .NET Core中带自定义命名空间的JSON转SOAP XML求助

解决方案:JSON转带自定义命名空间的SOAP XML(C# .NET Core)

要还原带自定义命名空间前缀的SOAP XML,核心是让序列化过程明确映射JSON对象到带命名空间的XML节点,可通过以下步骤实现:

1. 定义带XML命名空间属性的实体类

根据目标XML结构,给每个实体类/属性添加XmlRoot、XmlElement特性,指定对应的命名空间:

using System.Xml.Serialization;

[XmlRoot(ElementName = "APIRequest", Namespace = "http://Some-test-namespace.xsd")]
public class APIRequest
{
    [XmlElement(ElementName = "APIRequestDetails", Namespace = "http://Some-test-namespace.xsd")]
    public APIRequestDetails APIRequestDetails { get; set; }
}

public class APIRequestDetails
{
    [XmlElement(ElementName = "Individual", Namespace = "http://Some-test-namespace.xsd")]
    public Individual Individual { get; set; }
}

public class Individual
{
    [XmlElement(ElementName = "IndividualKey", Namespace = "http://Some-test-namespace.xsd")]
    public string IndividualKey { get; set; }
}

2. 实现JSON转实体 + 实体转带命名空间的XML

先将JSON反序列化为实体对象,再用XmlSerializer结合XmlSerializerNamespaces指定前缀与命名空间的映射,生成目标XML:

using System.IO;
using System.Xml;
using System.Xml.Serialization;
using Newtonsoft.Json;

public string JsonToSoapXml(string json)
{
    // 1. JSON反序列化为实体
    var apiRequest = JsonConvert.DeserializeObject<APIRequest>(json);

    // 2. 配置命名空间前缀映射
    var xmlNamespaces = new XmlSerializerNamespaces();
    xmlNamespaces.Add("asr", "http://Some-test-namespace.xsd");
    xmlNamespaces.Add("ar", "http://Some-test-namespace.xsd");
    xmlNamespaces.Add("guid", "http://Some-test-namespace.xsd");
    xmlNamespaces.Add("asw", "http://Some-test-namespace.xsd");
    xmlNamespaces.Add("xsi", "https://www.w3.org/2001/XMLSchema");

    // 3. 序列化实体为XML
    var serializer = new XmlSerializer(typeof(APIRequest));
    using var stringWriter = new StringWriter();
    using var xmlWriter = XmlWriter.Create(stringWriter, new XmlWriterSettings
    {
        Indent = true,
        OmitXmlDeclaration = true // 去掉默认XML声明,与示例结构一致
    });

    serializer.Serialize(xmlWriter, apiRequest, xmlNamespaces);
    return stringWriter.ToString();
}

3. 测试验证

调用方法传入目标JSON,即可生成与示例一致的SOAP XML:

var json = @"
{
  ""APIRequest"": {
    ""APIRequestDetails"": {
      ""Individual"": {
        ""IndividualKey"": ""3791239123-123123123-1231231""
      }
    }
  }
}";

var soapXml = JsonToSoapXml(json);
Console.WriteLine(soapXml);

关键说明

  • 命名空间URL必须与原SOAP XML完全一致,否则无法正确映射前缀。
  • XmlSerializerNamespaces用于显式绑定前缀和命名空间,确保生成的XML使用指定的asr、ar等前缀。
  • 若使用System.Text.Json替代Newtonsoft.Json,只需将反序列化代码替换为:var apiRequest = JsonSerializer.Deserialize<APIRequest>(json);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:15:43