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

C#反序列化XML无法提取sObject的Id值求助

解决C#反序列化XML时无法提取sf:Id值的问题

你的实体类中SObject类的Id属性的XmlElement特性配置错误,导致反序列化时无法匹配XML中的<sf:Id>节点,具体修正如下:

错误点说明

  1. SObject类的Id属性,ElementName被错误设置为sObject,但XML中对应的节点名称是Id(sf只是命名空间前缀)
  2. Namespace格式错误,sf:是前缀而非命名空间的一部分,实际命名空间应为urn:sobject.enterprise.soap.sforce.com
  3. Notification类的Id属性如果XML中没有指定命名空间,多余的Namespace参数可能也会导致该值无法正确读取

修正后的实体类代码

public class Notification
{
    // XML中的<Id>无命名空间,移除Namespace参数
    [XmlElement(ElementName = "Id")]
    public string Id { get; set; }

    [XmlElement(ElementName = "sObject", Namespace = "urn:sobject.enterprise.soap.sforce.com")]
    public SObject SObject { get; set; }
}

public class SObject
{
    [XmlElement(ElementName = "Id", Namespace = "urn:sobject.enterprise.soap.sforce.com")]
    public string Id { get; set; }
}

测试示例

var xmlContent = @"<Notification>
    <Id>04l5h0000002iBuAAI</Id>
    <sObject xsi:type=""sf:Social_Post__c"" xmlns:sf=""urn:sobject.enterprise.soap.sforce.com"">
        <sf:Id>a015h00002LiNpbAAF</sf:Id>
    </sObject>
</Notification>";

var serializer = new XmlSerializer(typeof(Notification));
using var stringReader = new StringReader(xmlContent);
var notification = (Notification)serializer.Deserialize(stringReader);

// 此时可正确获取sObject下的Id值
Console.WriteLine(notification.SObject.Id); // 输出: a015h00002LiNpbAAF

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:56:00