アプリケーションの設定をXAMLで書き出そうと、以下のようなコードを書きました。

using System.Windows.Markup;
using System.Xaml;

public class Item
{
}

[ContentProperty("Items")]
public class Settings
{
    public List<Item> Items { get; set; } = new List<Item>();
}

void Main()
{
    var settings = new Settings();
    settings.Items.Add(new Item());
    settings.Items.Add(new Item());
    Console.WriteLine(XamlServices.Save(settings));
}

上のコードでは <Root> の直下に <Item> が並ぶことを期待していたのですが、出力してみると間に <scg:List ...> という要素が入ってしまいます。

<Settings xmlns="clr-namespace:;assembly=query_qufjxk" xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <scg:List x:TypeArguments="Item" Capacity="4">
    <Item />
    <Item />
  </scg:List>
</Settings>

色々試した結果、List<T> ではなく Collection<T> を使えば、期待通りになることがわかりました。

<Settings xmlns="clr-namespace:;assembly=query_ujgmdq">
  <Item />
  <Item />
</Settings>

個人的には後者の方がWPFなどで馴染みのある形なので、もしかするとXAMLでは List<T> より Collection<T> (あるいは別の型)を使う慣習があるのではと思った次第です。気にせず List<T> を使えばいいのでしょうか?

独自のコレクション型を実装するのであれば List<T> より Collection<T> を継承するだろうとは思うのですが、今回はそこまでする予定はないので List<T> で格納するつもりでいました。