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

C# DataContract序列化XML时汽车属性值未填充问题咨询

问题原因及解决方案

核心原因

DataContract序列化机制只会序列化标记了[DataMember]的成员,你的代码逻辑存在数据存储与序列化目标不匹配的问题:

  • Car类中只有私有字段brand、model等被标记了[DataMember],但导入CSV时是给未标记[DataMember]的公共属性Brand、Model赋值,且这些属性没有和私有字段关联,导致数据根本没存到会被序列化的私有字段里,所以XML里自然没有有效值。
  • 手动录入时能正常序列化,是因为该逻辑直接操作了私有字段,或者对应的属性内部正确关联了标记过[DataMember]的私有字段,数据被存入了序列化目标中。

解决方案

你可以任选以下一种方式修复:

  1. 直接给公共属性标记[DataMember]
    去掉私有字段的[DataMember]标记,转而给公共属性添加标记,这样序列化时会直接读取公共属性的值:

    [DataContract]
    public class Car
    {
        [DataMember]
        public string Brand { get; set; }
        [DataMember]
        public string Model { get; set; }
        [DataMember]
        public int Year { get; set; }
        [DataMember]
        public decimal Price { get; set; }
    }
    
  2. 确保公共属性与私有字段关联
    如果要保留私有字段的[DataMember]标记,需要让公共属性的get/set方法直接操作对应的私有字段,这样给属性赋值时数据会存入私有字段,序列化时就能读取到:

    [DataContract]
    public class Car
    {
        [DataMember]
        private string brand;
        [DataMember]
        private string model;
        [DataMember]
        private int year;
        [DataMember]
        private decimal price;
    
        public string Brand
        {
            get => brand;
            set => brand = value;
        }
    
        public string Model
        {
            get => model;
            set => model = value;
        }
    
        // Year、Price属性同理实现
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:40:06