如何用ServiceStack传递List<T>?DTO中List属性未序列化问题
问题原因及解决方案
ServiceStack的序列化器默认仅处理带有getter和setter的属性,你的Roles是公共字段(field)而非属性(property),因此不会被序列化输出。
解决方法
方法1:将字段改为自动属性(推荐)
修改Roles的定义,添加get; set;使其成为标准属性:
public class PageItemDto { public Guid Id { get; set; } public Guid PageId { get; set; } public Guid ParentId { get; set; } public string Name { get; set; } public float Ordinal { get; set; } = 0.0f; public string RolesJson { get; set; } // 修改为自动属性 public List<string> Roles { get; set; } = new List<string>(); }
方法2:给字段添加序列化标记(不推荐)
若因特殊需求必须保留字段形式,可给Roles添加[DataMember]特性,强制序列化器识别它:
using System.Runtime.Serialization; public class PageItemDto { public Guid Id { get; set; } public Guid PageId { get; set; } public Guid ParentId { get; set; } public string Name { get; set; } public float Ordinal { get; set; } = 0.0f; public string RolesJson { get; set; } [DataMember] public List<string> Roles = new List<string>(); }
补充说明
RolesJson能正常输出,是因为它是标准的属性定义(包含get; set;),完全符合ServiceStack的序列化规则。
内容的提问来源于stack exchange,提问作者Steve McNiven-Scott
相关产品推荐
相关产品推荐

