当我尝试XML序列化一系列列表时,我遇到了这些错误。
无法生成临时类(result = 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();
}
}
这是传递给它的var:
List<Transaction>[] allTransactions = new List<Transaction>[20];
感谢您的帮助。
[UPDATE]
public class TransactionCollection
{
public List<Transaction>[] transactions;
public TransactionCollection()
{
}
public void Set(List<Transaction>[] t)
{
transactions = t;
}
}
答案 0 :(得分:1)
我完全不知道;错误有点令人沮丧。
但是,如果您宁愿完成某些事情而不是诊断问题,那么只需将列表转换为数组:
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>
ps:您不需要将数组“包装”到包含类型中以便序列化它们。
答案 1 :(得分:0)
这对我有用:
[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;
}
测试:
void Main()
{
var transactions1 = new List<Transaction> { new Transaction(), new Transaction() };
var transactions2 = new List<Transaction> { new Transaction(), new Transaction() };
var trans = new TransactionCollection();
trans.Transactions.Add(transactions1);
trans.Transactions.Add(transactions2);
SerializeToString(trans);
}
请注意,这是因为XmlSerializer
能够确定列表应该序列化为数组项。您还可以使用双数组事务而不是双重列表:
[XmlArrayItem()]
public Transaction[][] Transactions { get; set; }
如果您确实需要使用原始示例中的Array和List,则需要使List XML可序列化: