我正在努力将更多的DRY原则付诸实践并遇到知识限制。我编写了一个反序列化例程,我正在考虑将其用于不同的对象。
它对一个对象很有用但是当我把它移动到一个帮助器中并重新使用另一个对象的反序列化代码时...当然它返回了错误的类型......但是我将如何返回不同的类型......重载(不是非常干?)......也许返回一个通用对象然后再转换..但是我的反序列化行将如何工作?
对象1是ABCD
对象2是WXYZ
辅助方法是:
internal static List<ABCD> DeserializeConfig()
{
.....snip....
XmlSerializer serializer = new XmlSerializer(typeof(List<ABCD>), xRoot);
//how would this line above work..pass in the object type like below
XmlSerializer serializer = new XmlSerializer(typeof(_passedObject), xRoot);
}
感谢您的帮助
答案 0 :(得分:2)
只需将方法设为通用
即可internal static List<T> DeserializeConfig<T>() where T : ISerializable
{
.....snip....
XmlSerializer serializer = new XmlSerializer(typeof(List<T>), xRoot);
}
上面假设自定义序列化,您可以通过实现ISerializable
接口来控制流程的完成方式,具体方式,哪些字段等。这为您提供了编译器时间检查。您也可以简单地使用基本序列化,并记住使用[Serializable
]属性与[NonSerializable
]一起声明您的类型 - see docs
答案 1 :(得分:1)
您是否尝试过使用generics?这似乎对他们来说是个好地方。
您的方法签名将更改为类似的内容
internal static List<T> DeserializeConfig<T>()
其中T是要反序列化的对象的类型?
打电话,看起来像
var obj = DeserializeConfig<int>();
答案 2 :(得分:1)
你应该制作一个通用方法,如下所示:
internal static T DeserializeConfig<T>()
{
XmlSerializer serializer = new XmlSerializer(typeof(T), xRoot);
// ....
}