将命名空间添加到SyndicationFeed而不是单个元素?

Mic*_*tum 7 .net syndication-feed atom-feed

我有一个这样的课:

public static class MyFeedExtensions
{
    private readonly static XNamespace _namespace = XNamespace.Get(@"http://mynamespace");

    public static XElement MyElement(string value)
    {
        return new XElement(_namespace + "MyElement", value);
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用它来生成带有自定义扩展的Atom Feed:

var feed = new SyndicationFeed();
feed.ElementExtensions.Add(MyFeedExtensions.MyElement("Testing!"));
Run Code Online (Sandbox Code Playgroud)

这很好,除了feed将我的命名空间添加到元素:

<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="text">Hello World!</title>
  <id>00000000-0000-0000-0000-000000000000</id>
  <updated>2011-03-01T01:00:53Z</updated>
  <MyElement xmlns="http://mynamespace">Testing!</MyElement>
</feed>
Run Code Online (Sandbox Code Playgroud)

有没有办法用feed注册命名空间,以获得这样的输出?

<feed xmlns="http://www.w3.org/2005/Atom" xmlns:my="http://mynamespace">
  <title type="text">Hello World!</title>
  <id>00000000-0000-0000-0000-000000000000</id>
  <updated>2011-03-01T01:00:53Z</updated>
  <my:MyElement>Testing!</my:MyElement>
</feed>
Run Code Online (Sandbox Code Playgroud)

理想情况下,当我使用带有ElementExtensions的SyndicationItems时,我也希望这也能工作,因为feed应该知道所有各种命名空间.

(编辑:这纯粹是为了减少XML的大小并使其更容易为人类阅读)

Mic*_*tum 10

这个问题中找到答案并对其进行了调整:

feed.AttributeExtensions.Add(
    new XmlQualifiedName("my",XNamespace.Xmlns.ToString()),
    MyFeedExtensions.Namespace.ToString());
Run Code Online (Sandbox Code Playgroud)

基本上:xmlns:my使用Feed 注册属性,即使它们被添加到Feed中,它也会自动在元素上获取命名空间SyndicationItem.

模糊,但整洁!