C# 加载/保存接口列表
在我的应用程序中,我使用一个对象列表来实现我的ISorter接口,并公开一个方法void Sort(MyClass MyClass) 到目前为止,我在我的应用程序的入口点用一组硬编码的ISorter实现创建了这个列表。现在我已经到了我希望能够保存并从文件中加载此列表的位置 我希望格式是XML,以便可以手动编辑,但我发现.NETXMLSerializer类无法序列化接口。如果我用适当的属性标记基类,它可以序列化基类列表:C# 加载/保存接口列表,c#,interface,save,load,C#,Interface,Save,Load,在我的应用程序中,我使用一个对象列表来实现我的ISorter接口,并公开一个方法void Sort(MyClass MyClass) 到目前为止,我在我的应用程序的入口点用一组硬编码的ISorter实现创建了这个列表。现在我已经到了我希望能够保存并从文件中加载此列表的位置 我希望格式是XML,以便可以手动编辑,但我发现.NETXMLSerializer类无法序列化接口。如果我用适当的属性标记基类,它可以序列化基类列表: [System.Xml.Serialization.XmlInclude(t
[System.Xml.Serialization.XmlInclude(typeof(MyClassA))]
[System.Xml.Serialization.XmlInclude(typeof(MyClassB))]
class MyBaseClass
我不喜欢这一点,因为当我以后可能希望用不同的存储方法替换xml序列化时,它会使我的类与xml特定的属性混杂在一起
class Foo{
List<ISorter> MySorters
}
interface ISorter{
void Sort(MyClass myClass)
}
class SortByColor : ISorter{
public string SomeColorProperty{get;set;}
void Sort(MyClass myClass)
}
class SortByName: ISorter{
public string SomeNameProperty{get;set;}
void Sort(MyClass myClass)
}
class-Foo{
列出我的排序器
}
接口转换器{
无效排序(MyClass MyClass)
}
类别SortByColor:ISorter{
公共字符串SomeColorProperty{get;set;}
无效排序(MyClass MyClass)
}
类SortByName:ISorter{
公共字符串SomeNameProperty{get;set;}
无效排序(MyClass MyClass)
}
我想将我的列表传递给某个存储/加载方法,该方法可以从某个底层数据源(例如XML文件)创建/加载列表
编辑3:
我可能最终会使用DataContractserializer或XMLSerializer,因为这解决了我的问题,只要我提供一个公共基类。我原以为会有一种更优雅的方式来处理这个问题,而不会用属性污染我的对象如何将其存储为Json格式并使用JsonSerializer?这有点离题,但听起来你正在尝试“依赖注入容器”为你做的工作。您是否研究过这样的问题?当您“反序列化”一个接口时,您希望它创建一个实例的类是什么?您似乎想要序列化一组实现接口的类。我是说,你有多少接口?你提到一个。你打算反序列化“ISorter,ISorter,ISorter,ISorter,ISorter和ISorter”吗?在任何情况下,用基类替换接口都是愚蠢的。不过,为实现编写基类可能很方便。@MatthewWatson即使我使用DI,我仍然需要某种不同存储方法可以使用的接口implement@ClaudeHasler“…通过xml文件创建一组排序操作…”——这是一个很酷的想法。我希望你在问题中提到这一点。如果你想谈论不可知论,我会写一个排序描述格式,对实现它的底层类和接口是相当不可知的。我会发布API,让人们用自己的类来扩展它,但我会把它与排序定义文件分开。