我的泛型方法需要序列化传递给它的对象,但只是坚持它实现ISerializable似乎不起作用.例如,我有一个从Web服务(标记为SerializableAttribute)返回的结构,它可以很好地序列化为xml,但正如预期的那样,C#编译器会抱怨.
有没有办法在尝试序列化之前检查对象是否可序列化,或者更好的是,使用where关键字检查对象的方法是否合适?
这是我的完整方法:
public static void Push<T>(string url, T message)
where T : ISerializable
{
string xml = SerializeMessage(message);
// Send the message to Amazon SQS
SendMessageRequest sendReq = new SendMessageRequest { QueueUrl = url, MessageBody = xml };
AmazonSQSClient client = new AmazonSQSClient(S3User, S3Pass);
client.SendMessage(sendReq);
}
Run Code Online (Sandbox Code Playgroud)
和SerializeMessage:
private static string SerializeMessage<T>(T message)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
using (StringWriter stringWriter = new StringWriter())
{
xmlSerializer.Serialize(stringWriter, message);
return stringWriter.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
如果这不可能,那么在运行时检查对象是否可序列化的最佳方法是什么?