Une solution serait de considérer que NULL et vide valent tout les deux NULL, dans ce cas avant d'écrire ton XML tu change les null en string.Empty et inversement au chargement.
Dans une BDD, la valeur nulle est différente de la valeur vide... (grosso modo : null := '')
il me semble qu'il existe en dotnet une classe dbvalue qui possede une propriété 'Null' qui te permettrait de tester la valeur de ton champ...
je jeetterais un oeil en rentrant, si j'y pense...