Calling XmlWriter.WriteValue() passing a Guid as the parameter throws an exception.

StringWriter stringWriter = new StringWriter();
XmlTextWriter writer = new XmlTextWriter(stringWriter);
writer.WriteValue(Guid.NewGuid());

The exception thrown is:

InvalidCastException: Xml type 'List of xdt:untypedAtomic' does not support a conversion from Clr type 'Guid' to Clr type 'String'.

I don’t see any way around this except by casting the Guid to a string before passing to WriteValue(). Since this overload accepts an object type, even an extension method taking a Guid doesn’t help because the instance method is the one preferred by the compiler.

Casting the Guid to string seems to be the only option.

writer.WriteValue(XmlConvert.ToString(Guid.NewGuid()));

XmlConvert.ToString() has an overload that accepts a Guid parameter, so we know that will work correctly. The real question is why does XmlWriter not just handle a Guid parameter itself?