如何序列化列表<;T>;在c#中没有包装器阵列?

如何序列化列表<;T>;在c#中没有包装器阵列?,c#,xmlserializer,C#,Xmlserializer,我正在尝试序列化一些自定义类的列表: List<T> l = new List<T>(); ... XmlSerializer serializer = new XmlSerializer(l.GetType()); serializer.Serialize(writer, list); 我之所以尝试这样做,是因为它发生在包装器类中,所以我的实际输出格式如下: <PropertyName> <ArrayOfT> <T

我正在尝试序列化一些自定义类的
列表

List<T> l = new List<T>();
...
XmlSerializer serializer = new XmlSerializer(l.GetType());
serializer.Serialize(writer, list);
我之所以尝试这样做,是因为它发生在包装器类中,所以我的实际输出格式如下:

<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);
}

通过这种方式,您可以序列化项目,但不能序列化外部对象。

您可以采用以下方法:

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

这样可以序列化项目,但不能序列化外部对象。

如果
l
是类中的属性,请使用
[xmlement(“T”)]
属性。@TheLathalCoder我试图完全删除
ArrayOfT
元素,而不是重命名它,而且
l
也不是属性,它是构成属性的类中的
IXmlSerializable.WriteXml(XmlWriter writer)
的实现中的一个变量。你能不能在列表上循环一下?@juharr显然是这样,我认为这是因为我不熟悉XmlSerializer,如果您想将此作为答案发布,我将接受它。如果
l
是类中的属性,则可能重复使用
[xmlement(“T”)]
属性。@我试图完全删除
ArrayOfT
元素,而不是重命名它,
l
也不是属性,它是构成属性的类中的
IXmlSerializable.WriteXml(XmlWriter writer)
的实现中的一个变量。你能不能在列表上循环一下?@juharr显然是这样,我认为这是因为我不熟悉XmlSerializer,如果你想将此作为答案发布,我会接受。可能重复的答案是正确的,但尽管我投了赞成票,但我不会将其标记为接受,因为@juharr在评论中首先提到了它,我想给他时间将其作为答案提交,我会在明天检查,如果他没有发布,我会接受这个。这是正确的,但虽然我投了赞成票,但我不会因为@juharr在评论中首先提到了它,我想给他时间提交它作为答案,我会在明天检查,如果他没有发布,我会接受这个。
XmlSerializer serializer = new XmlSerializer(l.GetType());
foreach (T item in list)
{
    serializer.Serialize(writer, item);
}