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

.NET Core 3.1 API接收复杂XML对象时子属性为空如何解决

你当前的问题是混用了两种XML序列化器的特性,且DataContract特性配置错误,导致嵌套层级的节点无法正确映射到模型属性。具体错误点:

  1. 你同时注册了DataContractSerializer和XmlSerializer两种格式化器,二者的配置特性不兼容,会出现解析逻辑冲突
  2. Object2、Object3类上的[DataContract]的Name属性配置错误:你把类的契约名写成了上层属性的名称(Object2的Name设为了field2,Object3的Name设为了field3),导致序列化器无法匹配嵌套节点的结构
  3. 冗余添加了IsReference = true配置,你的XML没有循环引用场景,不需要该配置,反而会干扰正常解析。

以下两种可选解决方案二选一即可,不要混用:

方案1:使用DataContractSerializer解析

  1. 首先修改Startup.cs的配置,只保留DataContract序列化器的注册,移除XmlSerializer的注册:
services.AddControllers().AddXmlDataContractSerializerFormatters();
  1. 修正模型类的特性配置,删掉错误的Name和IsReference配置:
[DataContract(Namespace = "")]
public class Object1
{
    [DataMember(Name = "field1")]
    public string field1 { get; set; }
    [DataMember(Name = "field2")]
    public Object2 field2 { get; set; }
}

[DataContract]
public class Object2
{
    [DataMember(Name = "field3")]
    public string field3 { get; set; }
    [DataMember(Name = "field4")]
    public Object3 field4 { get; set; }
}

[DataContract]
public class Object3
{
    [DataMember(Name = "field5")]
    public string field5 { get; set; }
    [DataMember(Name = "field6")]
    public string field6 { get; set; }
}

方案2:使用XmlSerializer解析

  1. 修改Startup.cs配置,只保留XmlSerializer的注册:
services.AddControllers().AddXmlSerializerFormatters();
  1. 移除所有DataContract相关特性,改为使用Xml序列化特性配置:
[XmlRoot("Object1")]
public class Object1
{
    [XmlElement("field1")]
    public string field1 { get; set; }
    [XmlElement("field2")]
    public Object2 field2 { get; set; }
}

public class Object2
{
    [XmlElement("field3")]
    public string field3 { get; set; }
    [XmlElement("field4")]
    public Object3 field4 { get; set; }
}

public class Object3
{
    [XmlElement("field5")]
    public string field5 { get; set; }
    [XmlElement("field6")]
    public string field6 { get; set; }
}

注意:请求时需要确保Header中的Content-Type值为application/xml,不要携带额外的namespace参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:15:02