Linq to XML Disable default namespace

I'm trying to use LINQ to XML to write queries for a WebDAV server but I'm having a problem where LINQ is setting a default namespace (xmlns = "bla") which doesn't seem to be supported by WebDAV.

XNamespace ns = "d";
var content = new XElement(ns + "propfind"
,new XAttribute(XNamespace.Xmlns + "d", "DAV:")
,new XElement(ns + "allprops"));

The expected output is:

<d:propfind xmlns:d="DAV:"><d:allprop /></d:propfind>

But no matter how I attempt to serialize (even with XElement.Save(someStream, SaveOptions.DisableFormatting)) I always get this which is not supported by the WebDav server I'm trying to hit.

<propfind xmlns:d="DAV:" xmlns="d"><allprop /></propfind>
Jon Skeet
people
quotationmark

The problem is that your element isn't in the DAV: namespace - it's in the d namespace. You need to differentiate between the namespace URI and the namespace alias. You want:

XNamespace ns = "DAV:";
var content = new XElement(ns + "propfind",
    new XAttribute(XNamespace.Xmlns + "d", ns),
    new XElement(ns + "allprops"));

people

See more on this question at Stackoverflow