2012-04-30 8 views
4

リストの配列をXMLシリアル化しようとすると、これらのエラーが発生します。オブジェクトリストの配列をXMLでシリアル化するにはどうすればよいですか?

一時クラス(結果= 1)を生成できません。エラーCS1026:) 予期したエラーCS1002:;予期しない...エラーCS1525:無効な式 用語 ')'エラーCS1002:;

を期待ここに私のコードです:

これは例外をトリガする方法です。任意の助け

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

ありがとう:

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です。

[UPDATE]

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

    public TransactionCollection() 
    { 
    } 

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

なぜ匿名の投票を投票ですか? – Lee

+0

まず、xmlシリアライザは配列を渡すのではなく、ルート要素を探して、コレクションをカプセル化する単一のオブジェクトを渡します。 – payo

+0

OK上記のようにトランザクションリストの配列をカプセル化したクラスを作成しましたが、同じエラーが発生します。 – Lee

答えて

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

テスト:XmlSerializerはリストがすべきことをうまくすることができたためであると

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

注意配列項目として直列化されます。あなたが本当に元の例では、あなたのリストのXML serialisableを作成する必要があるとして、配列やリストを使用する必要がある場合

[XmlArrayItem()] 
public Transaction[][] Transactions { get; set; } 

:あなたはまた、取引のdouble配列ではなく、二重のリストを使用することができ

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:あなたは必要ありません。配列を包含する型に配列を「ラップ」して直列化します。

+0

これは私にとってもうまくいきます。 OPが実際に空のデータを渡している場合、私はそれがエラーを引き起こすのを見ることができた。 – bdwakefield

関連する問題