C# 如何用XML序列化对象列表数组?

C# 如何用XML序列化对象列表数组?,c#,xml,exception,xml-serialization,C#,Xml,Exception,Xml Serialization,当我尝试用XML序列化列表数组时,会出现这些错误 无法生成临时类(结果=1)。错误CS1026:) 预期错误CS1002:;预期。。。错误CS1525:表达式无效 术语“)”错误CS1002:;期望 这是我的密码: 这是触发异常的方法 public static string SerializeToString<T>(T obj) { XmlSerializer serializer = new XmlSerializer(typeof(T)); using (Str

当我尝试用XML序列化列表数组时,会出现这些错误

无法生成临时类(结果=1)。错误CS1026:) 预期错误CS1002:;预期。。。错误CS1525:表达式无效 术语“)”错误CS1002:;期望

这是我的密码:

这是触发异常的方法

public static string SerializeToString<T>(T obj)
{
    XmlSerializer serializer = new XmlSerializer(typeof(T));
    using (StringWriter writer = new StringWriter())
    {
        serializer.Serialize(writer, obj);
        return writer.ToString();
    }
}
公共静态字符串SerializeToString(T obj)
{
XmlSerializer serializer=新的XmlSerializer(typeof(T));
使用(StringWriter=新StringWriter())
{
serializer.Serialize(writer,obj);
返回writer.ToString();
}
}
这是传递给它的var:

List<Transaction>[] allTransactions = new List<Transaction>[20];
List[]allTransactions=新列表[20];
谢谢你的帮助

[更新]

public class TransactionCollection
{
    public List<Transaction>[] transactions;

    public TransactionCollection()
    {
    }

    public void Set(List<Transaction>[] t)
    {
        transactions = t;
    }
}
公共类TransactionCollection
{
公开上市[]交易;
公共事务集合()
{
}
公共无效集(列表[]t)
{
交易=t;
}
}
这对我很有用:

[XmlRoot("TransactionCollection")]
public class TransactionCollection
{
    private List<List<Transaction>> _lst = new List<List<Transaction>>();   

    [XmlArrayItem()]
    public List<List<Transaction>> Transactions { get { return _lst; } }

    public TransactionCollection()
    {
    }
}

[XmlRoot("Transaction")]
public class Transaction
{
    [XmlElement("Id")]
    public string Id = String.Empty;
}

如果您确实需要像原始示例中那样使用数组和列表,则需要使列表XML可序列化:

我不太清楚;这个错误有点令人沮丧

但是,如果您希望完成某项工作而不是诊断问题,则只需将列表转换为数组:

    public void Run()
    {
        var allTransactions = new List<Transaction>[20];
        for (int i=0; i < allTransactions.Length; i++)
        {
            allTransactions[i] = new List<Transaction>();
        }
        var a = Array.ConvertAll(allTransactions, x => x.ToArray());
        var s = SerializeToString(a);
        System.Console.WriteLine("{0}", s);
    }
public void Run()
{
var allTransactions=新列表[20];
for(int i=0;ix.ToArray());
var s=序列化字符串(a);
System.Console.WriteLine(“{0}”,s);
}
结果:

<ArrayOfArrayOfTransaction>
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
</ArrayOfArrayOfTransaction>


ps:为了序列化它们,不需要将数组“包装”到包含类型中

首先,xml序列化程序将查找根元素,而不是传递数组,而是传递封装集合的单个对象。好的,我创建了一个封装事务列表数组的类,如上图所示,但我得到了相同的错误。这对我也适用。如果OP实际传递的是空数据,我可以看到它会导致错误。
    public void Run()
    {
        var allTransactions = new List<Transaction>[20];
        for (int i=0; i < allTransactions.Length; i++)
        {
            allTransactions[i] = new List<Transaction>();
        }
        var a = Array.ConvertAll(allTransactions, x => x.ToArray());
        var s = SerializeToString(a);
        System.Console.WriteLine("{0}", s);
    }
<ArrayOfArrayOfTransaction>
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
  <ArrayOfTransaction />
</ArrayOfArrayOfTransaction>