C# DataContract序列化XML时汽车属性值未填充问题咨询
问题原因及解决方案
核心原因
DataContract序列化机制只会序列化标记了[DataMember]的成员,你的代码逻辑存在数据存储与序列化目标不匹配的问题:
- Car类中只有私有字段
brand、model等被标记了[DataMember],但导入CSV时是给未标记[DataMember]的公共属性Brand、Model赋值,且这些属性没有和私有字段关联,导致数据根本没存到会被序列化的私有字段里,所以XML里自然没有有效值。 - 手动录入时能正常序列化,是因为该逻辑直接操作了私有字段,或者对应的属性内部正确关联了标记过
[DataMember]的私有字段,数据被存入了序列化目标中。
解决方案
你可以任选以下一种方式修复:
直接给公共属性标记
[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; } }确保公共属性与私有字段关联
如果要保留私有字段的[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
相关产品推荐
相关产品推荐

