如何序列化IEnumerable集合中MyModel对象的Date属性
解决方案
你之前的写法错误是因为data是IEnumerable<MyModel>集合,集合本身没有Date属性,必须遍历集合中的每个元素提取Date字段。以下是几种可行的实现方式:
方式1:投影为仅含Date的集合(推荐临时场景)
通过LINQ将原集合投影成只包含Date的匿名对象集合,再序列化:
// 生成仅包含Date属性的对象数组 var dateItems = data.Select(item => new { item.Date }); var serialized = JsonConvert.SerializeObject(dateItems);
如果只需要纯日期字符串数组,可直接投影字符串:
var dateStrings = data.Select(item => item.Date); var serialized = JsonConvert.SerializeObject(dateStrings);
方式2:修改模型类(适合全局序列化仅需Date的场景)
在MyModel类中给不需要序列化的字段添加[JsonIgnore]特性:
public class MyModel { [JsonIgnore] public string Title; [JsonIgnore] public string Description; public string Date; }
之后直接序列化原集合即可,只会保留Date属性:
var serialized = JsonConvert.SerializeObject(data);
方式3:自定义ContractResolver(适合不修改原类的临时场景)
通过自定义契约解析器,动态指定只序列化Date属性:
public class DateOnlyContractResolver : DefaultContractResolver { protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization) { var properties = base.CreateProperties(type, memberSerialization); // 筛选保留Date属性 return properties.Where(p => p.PropertyName == nameof(MyModel.Date)).ToList(); } } // 使用示例 var serializerSettings = new JsonSerializerSettings { ContractResolver = new DateOnlyContractResolver() }; var serialized = JsonConvert.SerializeObject(data, serializerSettings);
内容的提问来源于stack exchange,提问作者BobbyP
相关产品推荐
相关产品推荐

