如何在没有 ArrayOf 包装器的情况下在 c# 中序列化 List<T>?

How to serialize List<T> in c# without the ArrayOf wrapper?

我正在尝试序列化一些自定义 class 的 List<T>,其中:

List<T> l = new List<T>();
...
XmlSerializer serializer = new XmlSerializer(l.GetType());
serializer.Serialize(writer, list);

它输出:

<ArrayOfT>
    <T>
        ...
    </T>
    <T>
        ...
    </T>
</ArrayOfT>

如何得到相同的东西,但没有 ArrayOfT 元素,所以它看起来像:

<T>
    ...
</T>
<T>
    ...
</T>

我正在尝试这样做,因为它发生在包装器中 class 所以我的实际输出格式为:

<PropertyName>
    <ArrayOfT>
        <T>
            ...
        </T>
        <T>
            ...
        </T>
    </ArrayOfT>
</PropertyName>

并且 ArrayOfT 元素是多余的(逻辑上它与 PropertyName 同名)

您或许可以采用这种方法:

XmlSerializer serializer = new XmlSerializer(l.GetType());
foreach (T item in list)
{
    serializer.Serialize(writer, item);
}

这样您序列化的是项目而不是外部对象。