我的通用方法需要序列化传递给它的对象,但是仅仅坚持它实现 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);
}
和序列化消息:
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();
}
}
如果这不可能,那么在运行时检查对象是否可序列化的最佳方法是什么?