为什么List<string>可保存到应用设置但LinkedList<string>无法保存?
底层原因说明
.NET 应用用户设置的持久化逻辑基于 ApplicationSettingsBase 实现,默认使用 XmlSerializer 完成对象和配置文件XML的互转,LinkedList<string> 无法被持久化核心是两个限制:
- 首先,
XmlSerializer对集合类型的序列化有强制要求:集合必须暴露公共的无参构造函数,且存在公共的Add方法供反序列化时插入元素重构集合。LinkedList<T>的Add方法是作为ICollection<T>接口的显式实现存在的,没有暴露为公共实例方法,XmlSerializer无法识别到可用的元素插入方法,直接跳过了该类型的序列化流程,所以不会报错也不会写入任何内容。 - 其次,.NET 应用设置系统内置了常用泛型集合的类型转换适配,
List<T>属于默认支持的集合类型,而LinkedList<T>不在内置支持列表中,也没有对应的默认TypeConverter实现类型到XML字符串的转换,最终导致持久化静默失败。
如果你不想每次都做List和LinkedList的转换,也可以自行实现对应LinkedList<string>的TypeConverter,并在Setting配置中指定该转换器,即可直接持久化LinkedList类型数据。
内容的提问来源于stack exchange,提问作者Ayub
相关产品推荐
相关产品推荐

