4

リストの配列を 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();
    }
}

そして、これはそれに渡される変数です:

List<Transaction>[] allTransactions = new List<Transaction>[20];

助けてくれてありがとう。

[アップデート]

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

    public TransactionCollection()
    {
    }

    public void Set(List<Transaction>[] t)
    {
        transactions = t;
    }
}
4

2 に答える 2

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: 配列をシリアル化するために、配列を含む型に「ラップ」する必要はありません。

于 2012-05-01T00:27:15.300 に答える
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 をシリアライズ可能にする必要があります。

于 2012-05-01T00:23:08.657 に答える