Comprobando si un objeto es un número en C #

Me gustaría comprobar si un objeto es un número para que.ToString() resultaría en una cadena que contiene dígitos y+,-,.

¿Es posible con una simple comprobación de tipo en .net (como:if (p is Number))?

O ¿Debería convertir a una cadena y luego tratar de analizar para duplicar?

Actualizar: Para aclarar mi objeto es int, uint, float, double, etc. no es una cadena. Estoy tratando de hacer una función que serialice cualquier objeto a xml como este:

<string>content</string>

o

<numeric>123.3</numeric>

o plantear una excepción.

Respuestas a la pregunta(10)

Su respuesta a la pregunta