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

如何读取现有SOAP XML消息?如何编写rootClass代码?

读取SOAP格式ExamCard文件及定义rootClass的方法

一、读取SOAP文件的实用方式

直接处理完整SOAP Envelope会增加不必要的代码复杂度,更高效的做法是跳过外层SOAP结构,直接定位到核心的ExamCard节点进行反序列化:

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

// 加载目标XML文件
XmlDocument doc = new XmlDocument();
doc.Load("PHANTOM_QT1_SLU_20151230.ExamCard");

// 配置命名空间管理器,匹配XML中的命名空间
XmlNamespaceManager nsMgr = new XmlNamespaceManager(doc.NameTable);
nsMgr.AddNamespace("soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
nsMgr.AddNamespace("a1", "http://schemas.microsoft.com/clr/nsassem/Philips.PmsMR.ExamCards.ECModel/philips.pmsmr.examcards.ecmodel_cs");

// 定位到Body下的ExamCard节点
XmlNode examCardNode = doc.SelectSingleNode("//soapenv:Body/a1:ExamCard", nsMgr);

// 反序列化节点为目标对象
XmlSerializer serializer = new XmlSerializer(typeof(ExamCard));
using (XmlNodeReader reader = new XmlNodeReader(examCardNode))
{
    ExamCard myObject = (ExamCard)serializer.Deserialize(reader);
}

二、编写rootClass(ExamCard类)

需要严格匹配XML的命名空间、节点名和属性,通过XML序列化特性完成映射:

using System.Xml.Serialization;

// 匹配XML中的命名空间和根节点名
[XmlRoot(Namespace = "http://schemas.microsoft.com/clr/nsassem/Philips.PmsMR.ExamCards.ECModel/philips.pmsmr.examcards.ecmodel_cs", ElementName = "ExamCard")]
public class ExamCard
{
    // 映射XML中的id属性
    [XmlAttribute("id")]
    public string Id { get; set; }

    // 根据XML实际结构补充其他属性,示例如下:
    // [XmlElement("PatientID")]
    // public string PatientID { get; set; }

    // 嵌套复杂类型需单独定义类并添加对应特性
}

关键注意事项

  • 命名空间必须与XML中a1前缀对应的命名空间完全一致,否则反序列化会失败
  • 若不清楚XML完整结构,可使用Visual Studio的「编辑→选择性粘贴→将XML粘贴为类」功能,快速生成匹配的类结构
  • 嵌套节点或集合类型需单独编写对应类,并添加XmlElement或XmlArray等特性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:11:16