我有一个简单的方法,可以将xml字符串反序列化为指定的类型。
public static class TextUtility
{
public static T Deserialize<T>(string xml)
{
...
}
}
这一切都很好。我遇到麻烦的地方就是调用这种方法。这个过程如下:
public interface IMessageReceived
{
string MessageBodyAsXML { get; set; }
string MessageType { get; set; }
}
public class MessageReceived : IMessageReceived
{...}
List<MessageReceived> messageList = new List<MessageReceived>();
然后,在处理消息的worker类中,我们遍历所有收到的消息。在该循环中,我们循环遍历潜在消息类型列表。
foreach (MessageReceived message in messageList)
{
foreach (var processor in processors)
{
if (processor.TypeToProcess.Name == message.MessageType)
{
// Now Create an instance of 'processor' from message.MessageBodyAsXML
}
}
}
我试试这个:
object messageObject = TextUtility.DeserializeMessage<object>(message.MessageBodyAsXML);
它有点有效,但通用对象&#39;引起下游问题。我需要更加紧密耦合。我可以这样做:
Type type = processor.GetType();
并且 填充&#39;输入&#39;使用正确的类型。但显然我无法做到这一点:
type messageObject = TextUtility.DeserializeMessage<type>(message.MessageBodyAsXML);
我正在努力避免每种类型的if / then。开放的想法。谢谢!
答案 0 :(得分:2)
显然,对于您在编译时不知道类型的动态目的,您需要提供Deserialize
方法的重载:
public static object Deserialize(Type targetType, string xml)
{
...
}